diff --git a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala index 7f5c3029dfbcf49a87a67035b38952081697c324..d38f16983184b4b380a9b455e43b16b8cb6c932e 100644 --- a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala +++ b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala @@ -12,7 +12,7 @@ import de.tobias.playpad.server.plugin.Plugin import de.tobias.playpad.server.project.{Design, Pad, Page, Project} import de.tobias.playpad.server.server.account._ import de.tobias.playpad.server.server.plugin.{PluginGet, PluginList} -import de.tobias.playpad.server.server.project.{ProjectGet, ProjectHandler} +import de.tobias.playpad.server.server.project._ import de.tobias.playpad.server.settings.SettingsHandler import de.tobias.playpad.server.transformer.JsonTransformer import spark.Spark._ @@ -62,6 +62,8 @@ object PlayPadServer extends App { // Project get("/projects", new ProjectGet(databaseConnection, sessionDao), new JsonTransformer) + post("/projects", new ProjectPost(databaseConnection, sessionDao), new JsonTransformer) + delete("/projects", new ProjectDelete(databaseConnection, sessionDao), new JsonTransformer) // Plugins get("/plugins/:id", new PluginGet(pluginDao), new JsonTransformer) diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala index dffb418a8acb32a80e912449f8c138a5758bcdf9..f2bce4a7ee9db15ac820b18a4b604ae31e97f43a 100644 --- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala +++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala @@ -35,4 +35,26 @@ class ProjectLoader { projects } + + def getAccountId(connection: Connection, id: UUID): Int = { + val sql = s"SELECT account_id FROM $PROJECT WHERE $PROJECT_ID = ?" + + val preparedStatement = connection.prepareStatement(sql) + preparedStatement.setString(1, id.toString) + val result = preparedStatement.executeQuery() + + while (result.next()) { + val account_id = result.getInt(PROJECT_ACCOUNT_ID) + + result.close() + preparedStatement.close() + + return account_id + } + + result.close() + preparedStatement.close() + + -1 + } } diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala index 44ce81054e41f06cbd05df22747f5cf67d3938ea..be385e41e82cab37cd7eb7e305fde150f5270372 100644 --- a/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala +++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala @@ -1,6 +1,7 @@ package de.tobias.playpad.server.project.saver.sql import java.sql.Connection +import java.util.UUID import de.tobias.playpad.server.project.Project import de.tobias.playpad.server.project.utils.SqlDef._ @@ -17,4 +18,7 @@ class ProjectSaver { val pageSaver = new PageSaver project.pages.foreach(pageSaver.save(connection, _)) } + def delete(connection: Connection, project: UUID): Unit = { + SqlHelper.delete(connection, PROJECT, project) + } } diff --git a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala index 8f93ec9e49af5a69fd73e0f7324d2d69d1cfaef5..cd97aac85e5b18fa3f6eb645522cfa265a96088c 100644 --- a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala +++ b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala @@ -23,7 +23,7 @@ object SqlHelper { } private def createQuery[T](connection: Connection, table: String, field: String, value: T): PreparedStatement = { - val sql = "INSERT INTO %s (id, %s) VALUES(?, ?) ON DUPLICATE KEY UPDATE %s=?".format(table, field, field) + val sql = s"INSERT INTO $table (id, $field) VALUES(?, ?) ON DUPLICATE KEY UPDATE $field=?" val preparedStatement = connection.prepareStatement(sql) value match { @@ -48,6 +48,22 @@ object SqlHelper { preparedStatement } + def delete(connection: Connection, table: String, id: Int): Unit = { + val sql = s"DELETE FROM $table WHERE id = ?" + val preparedStatement = connection.prepareStatement(sql) + preparedStatement.setInt(1, id) + preparedStatement.execute() + preparedStatement.close() + } + + def delete(connection: Connection, table: String, uuid: UUID): Unit = { + val sql = s"DELETE FROM $table WHERE id = ?" + val preparedStatement = connection.prepareStatement(sql) + preparedStatement.setString(1, uuid.toString) + preparedStatement.execute() + preparedStatement.close() + } + def createTables(connection: Connection): Unit = { def createTable(sql: String) = { val preparedStatement = connection.prepareStatement(sql) diff --git a/src/main/scala/de/tobias/playpad/server/server/project/ProjectDelete.scala b/src/main/scala/de/tobias/playpad/server/server/project/ProjectDelete.scala new file mode 100644 index 0000000000000000000000000000000000000000..b5a48aa89a6fb84cb1ebf11c199da209e78e7481 --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/server/project/ProjectDelete.scala @@ -0,0 +1,37 @@ +package de.tobias.playpad.server.server.project + +import java.sql.Connection +import java.util.UUID + +import com.j256.ormlite.dao.Dao +import de.tobias.playpad.server.account.Session +import de.tobias.playpad.server.project.loader.sql.ProjectLoader +import de.tobias.playpad.server.project.saver.sql.ProjectSaver +import de.tobias.playpad.server.server.{Result, Status} +import spark.{Request, Response, Route} + +/** + * Created by tobias on 17.02.17. + */ +class ProjectDelete(connection: Connection, sessionDao: Dao[Session, Int]) extends Route { + override def handle(request: Request, response: Response): AnyRef = { + val sessionKey = request.queryParams("session") + val session = Session.getSession(sessionKey, sessionDao) + session match { + case Some(s) => + val projectId = UUID.fromString(request.queryParams("project")) + + val projectLoader = new ProjectLoader + val account_id = projectLoader.getAccountId(connection, projectId) + if (account_id == s.getAccount.id) { + val projectSaver = new ProjectSaver + projectSaver.delete(connection, projectId) + + return new Result(Status.OK, "added project") + } + new Result(Status.ERROR, "session mismatch") + case None => + new Result(Status.ERROR, "session invalid") + } + } +}