From 79b1d16b71ca01be0e48abe0e9bdfde58eb619b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= <clement.pit-claudel@epfl.ch>
Date: Thu, 19 Dec 2024 18:24:03 +0100
Subject: [PATCH] server: Improve error message in postInitApp

---
 .../webapp/server/web/WebServerRoutes.scala   | 28 +++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
index 430d2d7..a98eb3c 100644
--- a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
+++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
@@ -4,7 +4,7 @@ package web
 
 import java.net.InetAddress
 import scala.jdk.CollectionConverters.*
-import scala.util.Try
+import scala.util.{Try, Success, Failure}
 import cask.endpoints.JsonData
 
 import decorators.checkOriginHeader
@@ -51,8 +51,8 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
     ListAppsResponse.Wire.encode(ListAppsResponse(WebServer.appDirectory.values.map(_.appInfo).toSeq))
 
   @cask.getJson(f"${Endpoints.Api.instanceInfo}")
-  def getAppInfo(instanceId: InstanceId) =
-    val response: cask.Response[JsonData] = WebServer.instances.get(instanceId) match
+  def getAppInfo(instanceId: InstanceId): cask.Response[JsonData] =
+    WebServer.instances.get(instanceId) match
       case Some(inst) =>
         val authority = if Config.PUBLIC_INSTANCE then "{{authority}}" else f"$hostAddress:${Config.HTTP_PORT}"
         val shareUrl = f"{{protocol}}://$authority${Endpoints.App}/${inst.appInfo.id}/$instanceId/"
@@ -60,25 +60,25 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
         val response = InstanceInfoResponse(instanceId, inst.registeredUserIds, wsEndpoint, shareUrl)
         InstanceInfoResponse.Wire.encode(response)
       case None =>
-        cask.Response(f"Unknown instance id $instanceId", 400)
-    response
+        cask.Response(f"Unknown instance '$instanceId'", 400)
 
   @cask.post(f"${Endpoints.Api.createInstance}")
-  def postInitApp(request: cask.Request) =
-    val response: cask.Response[JsonData] =
-      val req = CreateInstanceRequest.Wire.decode(ujson.read(request.text()))
-      if req.isFailure then
+  def postInitApp(request: cask.Request): cask.Response[JsonData] =
+    CreateInstanceRequest.Wire.decode(ujson.read(request.text())) match
+      case Failure(_) =>
         cask.Response(f"Unable to decode data: ${request.text()}", 400)
-      else
-        val appId = WebServer.createInstance(req.get.appName, req.get.userIds)
-        CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
-    response
+      case Success(CreateInstanceRequest(appName, userIds)) =>
+        if WebServer.appDirectory.contains(appName) then
+          val appId = WebServer.createInstance(appName, userIds)
+          CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
+        else
+          cask.Response(f"Unknown app '$appName'", 400)
 
   @checkOriginHeader
   @cask.websocket(f"${Endpoints.WebSocket}/:instanceId/:userId")
   def websocket(instanceId: String, userId: String, request: cask.Request): cask.WebsocketResult =
     WebServer.instances.get(instanceId) match
       case Some(app) => app.connect(userId)
-      case None => cask.Response(f"Unknown instance id $instanceId", 400)
+      case None => cask.Response(f"Unknown instance '$instanceId'", 400)
 
   initialize()
-- 
GitLab