diff --git a/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/TaskServer.kt b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/TaskServer.kt index b92fba3..fb17dd3 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/TaskServer.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/TaskServer.kt @@ -1,7 +1,9 @@ package com.faraphel.tasks_valider.connectivity.task +import com.faraphel.tasks_valider.connectivity.task.api.TaskSessionManagerApi import com.faraphel.tasks_valider.connectivity.task.session.TaskSessionManager import com.faraphel.tasks_valider.database.TaskDatabase +import com.faraphel.tasks_valider.database.api.TaskDatabaseApi import fi.iki.elonen.NanoHTTPD @@ -16,50 +18,41 @@ class TaskServer( ) : NanoHTTPD(port) { private val sessionManager = TaskSessionManager() ///< the session manager + private val sessionManagerApi = TaskSessionManagerApi(this.sessionManager) ///< the api of the session manager + private val databaseApi = TaskDatabaseApi(this.database) ///< the api of the database + + /** + * Handle an API request + * @param httpSession the http session + */ override fun serve(httpSession: IHTTPSession): Response { // get the session data of the client val taskSession = this.sessionManager.getOrCreateSessionData(httpSession) - // get the method used - val method: Method = httpSession.method - // parse the url val uri: String = httpSession.uri.substring(1) // remove the first slash - val uriComponents = uri.split("/") + val path = uri.split("/").toMutableList() // get the type of the request from the uri - val requestType = uriComponents.getOrNull(0) + val requestType = path.removeFirstOrNull() ?: return newFixedLengthResponse( NanoHTTPD.Response.Status.BAD_REQUEST, "text/plain", - "Invalid request type" + "Missing request type" ) // get the response from the correct part of the application val response = when (requestType) { // session requests - "sessions" -> - this.sessionManager.handleApiRequest(taskSession, httpSession, method) - + "sessions" -> this.sessionManagerApi.handleRequest(taskSession, httpSession, path) // entities requests - "entities" -> { - val entityName = uriComponents.getOrNull(1) - ?: return newFixedLengthResponse( - NanoHTTPD.Response.Status.BAD_REQUEST, - "text/plain", - "Invalid entity name" - ) - - // TODO(Faraphel): the uri arguments should be handled in the handleApiRequest - return this.database.handleApiRequest(taskSession, httpSession, method, entityName) - } - + "entities" -> return this.databaseApi.handleRequest(taskSession, httpSession, path) // invalid requests else -> newFixedLengthResponse( NanoHTTPD.Response.Status.BAD_REQUEST, "text/plain", - "Invalid request type" + "Unknown request type" ) } diff --git a/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/api/TaskSessionManagerApi.kt b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/api/TaskSessionManagerApi.kt new file mode 100644 index 0000000..305e3f3 --- /dev/null +++ b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/api/TaskSessionManagerApi.kt @@ -0,0 +1,139 @@ +package com.faraphel.tasks_valider.connectivity.task.api + +import com.faraphel.tasks_valider.connectivity.task.session.TaskPermission +import com.faraphel.tasks_valider.connectivity.task.session.TaskRole +import com.faraphel.tasks_valider.connectivity.task.session.TaskSession +import com.faraphel.tasks_valider.connectivity.task.session.TaskSessionManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import fi.iki.elonen.NanoHTTPD + + +/** + * the HTTP API for the session manager + */ +class TaskSessionManagerApi(private val sessionManager: TaskSessionManager) { + private val jsonParser = Gson() ///< the json parser + + /** + * Handle a HTTP Api request + * @param taskSession the data of the client session + * @param httpSession the data of the http session + * @param path the path of the request + */ + fun handleRequest( + taskSession: TaskSession, + httpSession: NanoHTTPD.IHTTPSession, + path: MutableList, + ): NanoHTTPD.Response { + // get the target session id + val targetSessionId = path.removeFirstOrNull() + + return if (targetSessionId == null) { + // no specific session targeted + this.handleRequestGeneric(taskSession, httpSession) + } else { + // a specific session is targeted + this.handleRequestSpecific(taskSession, httpSession, targetSessionId) + } + } + + /** + * Handle a request with no specific session targeted + */ + private fun handleRequestGeneric( + taskSession: TaskSession, + httpSession: NanoHTTPD.IHTTPSession, + ): NanoHTTPD.Response { + when (httpSession.method) { + // get all the session data + NanoHTTPD.Method.GET -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.READ)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "Forbidden" + ) + + // return the session data + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.OK, + "application/json", + jsonParser.toJson(taskSession) + ) + } + // other action are limited + else -> { + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.METHOD_NOT_ALLOWED, + "text/plain", + "Unknown method" + ) + } + } + } + + private fun handleRequestSpecific( + taskSession: TaskSession, + httpSession: NanoHTTPD.IHTTPSession, + targetSessionId: String, + ): NanoHTTPD.Response { + when (httpSession.method) { + // change a specific client session data + NanoHTTPD.Method.POST -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.ADMIN)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "You are not allowed to update a session" + ) + + // parse the content of the request + val targetSession = jsonParser.fromJson( + httpSession.inputStream.bufferedReader().readText(), + TaskSession::class.java + ) + + // update the session + this.sessionManager.setSessionData(targetSessionId, targetSession) + + // success message + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.OK, + "text/plain", + "Session updated" + ) + } + // delete the session + NanoHTTPD.Method.DELETE -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.ADMIN)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "You are not allowed to delete a session" + ) + + // delete the target session + this.sessionManager.deleteSessionData(targetSessionId) + + // success message + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.OK, + "text/plain", + "Session deleted" + ) + } + // ignore other methods + else -> { + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.METHOD_NOT_ALLOWED, + "text/plain", + "Invalid method" + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/session/TaskSessionManager.kt b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/session/TaskSessionManager.kt index 10be9ed..e0552c6 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/session/TaskSessionManager.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/connectivity/task/session/TaskSessionManager.kt @@ -10,15 +10,13 @@ import java.util.* * The manager for the session system */ class TaskSessionManager { - private val jsonParser = Gson() ///< the json parser - private val jsonTypeToken = object : TypeToken>(){} ///< the json type private val sessions = mutableMapOf() ///< sessions specific data /** * Create a new session * @param session the data for the session (optional) * @param sessionId the session id to use (optional) - * @return a new session identifiant + * @return a new session identifier */ fun newSessionData( session: TaskSession = TaskSession(), @@ -40,14 +38,31 @@ class TaskSessionManager { } /** - * Get data from a session identifiant - * @param sessionId the identifiant of the session + * Get data from a session identifier + * @param sessionId the identifier of the session * @return the session data */ fun getSessionData(sessionId: String): TaskSession? { return this.sessions[sessionId] } + /** + * Set the data of a session + * @param sessionId the identifier of the session + * @param session the session data + */ + fun setSessionData(sessionId: String, session: TaskSession) { + this.sessions[sessionId] = session + } + + /** + * Delete a session + * @param sessionId the identifier of the session + */ + fun deleteSessionData(sessionId: String): TaskSession? { + return this.sessions.remove(sessionId) + } + /** * Get data from a http session. If it does not exist, create it. * @param httpSession the HTTP session @@ -75,86 +90,11 @@ class TaskSessionManager { response: NanoHTTPD.Response, cookies: NanoHTTPD.CookieHandler ): NanoHTTPD.Response { + // update the cookie of the user cookies.set(NanoHTTPD.Cookie("sessionId", this.newSessionData())) + // load them in the response cookies.unloadQueue(response) + return response } - - /** - * Handle a HTTP Api request - * @param taskSession the data of the client session - * @param httpSession the data of the http session - * @param method the method used - */ - fun handleApiRequest( - taskSession: TaskSession, - httpSession: NanoHTTPD.IHTTPSession, - method: NanoHTTPD.Method - ): NanoHTTPD.Response { - when (method) { - // get a client session data - NanoHTTPD.Method.GET -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.READ)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - // return the session data - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.OK, - "application/json", - jsonParser.toJson(taskSession) - ) - } - // change a client session data - NanoHTTPD.Method.POST -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.ADMIN)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - // parse the content of the request - val data: Map = jsonParser.fromJson( - httpSession.inputStream.bufferedReader().readText(), - jsonTypeToken.type - ) - - // update the role - data["role"]?.let { role -> - try { - taskSession.role = TaskRole.valueOf(role) - } catch (exception: IllegalArgumentException) { - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.BAD_REQUEST, - "text/plain", - "Invalid role" - ) - } - // NOTE(Faraphel): does a modification on the object require updating the array ? - } - - // success message - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.OK, - "text/plain", - "Session updated" - ) - } - - // other action are limited - else -> { - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.METHOD_NOT_ALLOWED, - "text/plain", - "Method not allowed" - ) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/TaskDatabase.kt b/app/src/main/java/com/faraphel/tasks_valider/database/TaskDatabase.kt index 17bd5bb..bd59fe0 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/TaskDatabase.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/TaskDatabase.kt @@ -4,10 +4,9 @@ import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters import com.faraphel.tasks_valider.connectivity.task.session.TaskPermission -import com.faraphel.tasks_valider.connectivity.task.session.TaskRole import com.faraphel.tasks_valider.connectivity.task.session.TaskSession -import com.faraphel.tasks_valider.database.api.* -import com.faraphel.tasks_valider.database.api.base.BaseApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseApi +import com.faraphel.tasks_valider.database.api.entities.* import com.faraphel.tasks_valider.database.converters.InstantConverter import com.faraphel.tasks_valider.database.dao.GroupDao import com.faraphel.tasks_valider.database.dao.GroupStudentDao @@ -44,8 +43,6 @@ import fi.iki.elonen.NanoHTTPD InstantConverter::class ) abstract class TaskDatabase : RoomDatabase() { - // entities - abstract fun groupDao(): GroupDao abstract fun studentDao(): StudentDao abstract fun teacherDao(): TeacherDao @@ -53,93 +50,4 @@ abstract class TaskDatabase : RoomDatabase() { abstract fun groupStudentDao(): GroupStudentDao abstract fun taskGroupDao(): TaskGroupDao - - // api - - private val api: Map = mapOf( - "group" to GroupApi(this.groupDao()), - "student" to StudentApi(this.studentDao()), - "teacher" to TeacherApi(this.teacherDao()), - "task" to TaskApi(this.taskDao()), - - "group_student" to GroupStudentApi(this.groupStudentDao()), - "task_group" to TaskGroupApi(this.taskGroupDao()), - ) - - /** - * dispatch an API request - */ - fun handleApiRequest( - taskSession: TaskSession, - httpSession: NanoHTTPD.IHTTPSession, - method: NanoHTTPD.Method, - entityName: String - ): NanoHTTPD.Response { - // get the correspond Api object for this entity - val entityApi = this.api[entityName] - ?: return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.NOT_FOUND, - "text/plain", - "Invalid entity name" - ) - - // dispatch the request to the correct entity API - when (method) { - // check if the data is in the database - NanoHTTPD.Method.HEAD -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.READ)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - return entityApi.head(httpSession) - } - // get the data from the database - NanoHTTPD.Method.GET -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.READ)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - return entityApi.get(httpSession) - } - // insert the data into the database - NanoHTTPD.Method.POST -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.WRITE)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - return entityApi.post(httpSession) - } - // delete the data from the database - NanoHTTPD.Method.DELETE -> { - // check the permission of the session - if (taskSession.role.permissions.contains(TaskPermission.WRITE)) - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.FORBIDDEN, - "text/plain", - "Forbidden" - ) - - return entityApi.delete(httpSession) - } - // other methods are not allowed - else -> - return NanoHTTPD.newFixedLengthResponse( - NanoHTTPD.Response.Status.METHOD_NOT_ALLOWED, - "text/plain", - "Method not allowed" - ) - } - } } diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskDatabaseApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskDatabaseApi.kt new file mode 100644 index 0000000..d1e9133 --- /dev/null +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskDatabaseApi.kt @@ -0,0 +1,108 @@ +package com.faraphel.tasks_valider.database.api + +import com.faraphel.tasks_valider.connectivity.task.session.TaskPermission +import com.faraphel.tasks_valider.connectivity.task.session.TaskSession +import com.faraphel.tasks_valider.database.TaskDatabase +import com.faraphel.tasks_valider.database.api.entities.* +import com.faraphel.tasks_valider.database.api.entities.base.BaseApi +import fi.iki.elonen.NanoHTTPD + +class TaskDatabaseApi(private val database: TaskDatabase) { + private val api: Map = mapOf( + "group" to GroupApi(this.database.groupDao()), + "student" to StudentApi(this.database.studentDao()), + "teacher" to TeacherApi(this.database.teacherDao()), + "task" to TaskApi(this.database.taskDao()), + + "group_student" to GroupStudentApi(this.database.groupStudentDao()), + "task_group" to TaskGroupApi(this.database.taskGroupDao()), + ) + + /** + * handle an API request + * @param taskSession the current user session + * @param httpSession the http session + * @param path the path of the request + */ + fun handleRequest( + taskSession: TaskSession, + httpSession: NanoHTTPD.IHTTPSession, + path: MutableList + ): NanoHTTPD.Response { + // get the entity name + val entityName = path.removeFirstOrNull() + ?: return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.BAD_REQUEST, + "text/plain", + "Missing entity name" + ) + + // get the correspond Api object for this entity + val entityApi = this.api[entityName] + ?: return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.NOT_FOUND, + "text/plain", + "Unknown entity name" + ) + + // dispatch the request to the correct entity API + when (httpSession.method) { + // check if the data is in the database + // TODO(Faraphel): should only be allowed to read data concerning the current class session + NanoHTTPD.Method.HEAD -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.READ)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "Forbidden" + ) + + return entityApi.head(httpSession) + } + // get the data from the database + NanoHTTPD.Method.GET -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.READ)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "Forbidden" + ) + + return entityApi.get(httpSession) + } + // insert the data into the database + NanoHTTPD.Method.POST -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.WRITE)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "Forbidden" + ) + + return entityApi.post(httpSession) + } + // delete the data from the database + NanoHTTPD.Method.DELETE -> { + // check the permission of the session + if (taskSession.role.permissions.contains(TaskPermission.WRITE)) + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.FORBIDDEN, + "text/plain", + "Forbidden" + ) + + return entityApi.delete(httpSession) + } + // other methods are not allowed + else -> + return NanoHTTPD.newFixedLengthResponse( + NanoHTTPD.Response.Status.METHOD_NOT_ALLOWED, + "text/plain", + "Method not allowed" + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/GroupApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupApi.kt similarity index 60% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/GroupApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupApi.kt index dfc2acd..e345ddf 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/GroupApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.GroupEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/GroupStudentApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupStudentApi.kt similarity index 63% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/GroupStudentApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupStudentApi.kt index 7fdfddd..069733f 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/GroupStudentApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/GroupStudentApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.GroupStudentEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/StudentApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/StudentApi.kt similarity index 61% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/StudentApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/StudentApi.kt index 8f1f67b..a380111 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/StudentApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/StudentApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.StudentEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskApi.kt similarity index 60% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/TaskApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskApi.kt index 1385d1e..376f240 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.TaskEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskGroupApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskGroupApi.kt similarity index 62% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/TaskGroupApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskGroupApi.kt index eeb52f3..f1c9f63 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/TaskGroupApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TaskGroupApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.TaskGroupEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/TeacherApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TeacherApi.kt similarity index 61% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/TeacherApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TeacherApi.kt index 37cf1c9..f412fa3 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/TeacherApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/TeacherApi.kt @@ -1,6 +1,6 @@ -package com.faraphel.tasks_valider.database.api +package com.faraphel.tasks_valider.database.api.entities -import com.faraphel.tasks_valider.database.api.base.BaseJsonApi +import com.faraphel.tasks_valider.database.api.entities.base.BaseJsonApi import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.TeacherEntity diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseApi.kt similarity index 92% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseApi.kt index 7f338b3..d40665e 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseApi.kt @@ -1,4 +1,4 @@ -package com.faraphel.tasks_valider.database.api.base +package com.faraphel.tasks_valider.database.api.entities.base import fi.iki.elonen.NanoHTTPD diff --git a/app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseJsonApi.kt b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseJsonApi.kt similarity index 97% rename from app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseJsonApi.kt rename to app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseJsonApi.kt index f947220..4668feb 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/database/api/base/BaseJsonApi.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/database/api/entities/base/BaseJsonApi.kt @@ -1,4 +1,4 @@ -package com.faraphel.tasks_valider.database.api.base +package com.faraphel.tasks_valider.database.api.entities.base import com.faraphel.tasks_valider.database.dao.base.BaseDao import com.faraphel.tasks_valider.database.entities.base.BaseEntity