-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1cd5b89
commit 80635e5
Showing
7 changed files
with
217 additions
and
3 deletions.
There are no files selected for viewing
56 changes: 56 additions & 0 deletions
56
...Main/kotlin/me/nathanfallet/groupeminaste/controllers/projects/IProjectLinksController.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
package me.nathanfallet.groupeminaste.controllers.projects | ||
|
||
import io.ktor.server.application.* | ||
import me.nathanfallet.groupeminaste.models.projects.Project | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLink | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLinkPayload | ||
import me.nathanfallet.ktorx.controllers.IChildModelController | ||
import me.nathanfallet.ktorx.models.annotations.* | ||
|
||
interface IProjectLinksController : | ||
IChildModelController<ProjectLink, String, ProjectLinkPayload, ProjectLinkPayload, Project, String> { | ||
|
||
@APIMapping | ||
@AdminTemplateMapping | ||
@ListModelPath | ||
suspend fun list(@ParentModel parent: Project): List<ProjectLink> | ||
|
||
@APIMapping | ||
@GetModelPath | ||
@DocumentedError(404, "projects_not_found") | ||
suspend fun get(call: ApplicationCall, @ParentModel parent: Project, @Id id: String): ProjectLink | ||
|
||
@APIMapping | ||
@CreateModelPath | ||
@AdminTemplateMapping | ||
@DocumentedError(401, "auth_invalid_credentials") | ||
@DocumentedError(500, "error_internal") | ||
suspend fun create( | ||
call: ApplicationCall, | ||
@ParentModel parent: Project, | ||
@Payload payload: ProjectLinkPayload, | ||
): ProjectLink | ||
|
||
@APIMapping | ||
@UpdateModelPath | ||
@AdminTemplateMapping | ||
@DocumentedError(401, "auth_invalid_credentials") | ||
@DocumentedError(404, "projects_not_found") | ||
@DocumentedError(500, "error_internal") | ||
suspend fun update( | ||
call: ApplicationCall, | ||
@ParentModel parent: Project, | ||
@Id id: String, | ||
@Payload payload: ProjectLinkPayload, | ||
): ProjectLink | ||
|
||
@APIMapping | ||
@DeleteModelPath | ||
@AdminTemplateMapping | ||
@DocumentedType(ProjectLink::class) | ||
@DocumentedError(401, "auth_invalid_credentials") | ||
@DocumentedError(404, "projects_not_found") | ||
@DocumentedError(500, "error_internal") | ||
suspend fun delete(call: ApplicationCall, @ParentModel parent: Project, @Id id: String) | ||
|
||
} |
67 changes: 67 additions & 0 deletions
67
...nMain/kotlin/me/nathanfallet/groupeminaste/controllers/projects/ProjectLinksController.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package me.nathanfallet.groupeminaste.controllers.projects | ||
|
||
import io.ktor.http.* | ||
import io.ktor.server.application.* | ||
import me.nathanfallet.groupeminaste.models.projects.Project | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLink | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLinkPayload | ||
import me.nathanfallet.ktorx.models.exceptions.ControllerException | ||
import me.nathanfallet.ktorx.usecases.users.IRequireUserForCallUseCase | ||
import me.nathanfallet.usecases.models.create.ICreateChildModelSuspendUseCase | ||
import me.nathanfallet.usecases.models.delete.IDeleteChildModelSuspendUseCase | ||
import me.nathanfallet.usecases.models.get.IGetChildModelSuspendUseCase | ||
import me.nathanfallet.usecases.models.list.IListChildModelSuspendUseCase | ||
import me.nathanfallet.usecases.models.update.IUpdateChildModelSuspendUseCase | ||
|
||
class ProjectLinksController( | ||
private val requireUserForCallUseCase: IRequireUserForCallUseCase, | ||
private val listProjectLinksUseCase: IListChildModelSuspendUseCase<ProjectLink, String>, | ||
private val getProjectLinkUseCase: IGetChildModelSuspendUseCase<ProjectLink, String, String>, | ||
private val createProjectLinkUseCase: ICreateChildModelSuspendUseCase<ProjectLink, ProjectLinkPayload, String>, | ||
private val updateProjectLinkUseCase: IUpdateChildModelSuspendUseCase<ProjectLink, String, ProjectLinkPayload, String>, | ||
private val deleteProjectLinkUseCase: IDeleteChildModelSuspendUseCase<ProjectLink, String, String>, | ||
) : IProjectLinksController { | ||
|
||
override suspend fun list(parent: Project): List<ProjectLink> { | ||
return listProjectLinksUseCase(parent.id) | ||
} | ||
|
||
override suspend fun get(call: ApplicationCall, parent: Project, id: String): ProjectLink { | ||
return getProjectLinkUseCase(id, parent.id) ?: throw ControllerException( | ||
HttpStatusCode.NotFound, "projects_not_found" | ||
) | ||
} | ||
|
||
override suspend fun create(call: ApplicationCall, parent: Project, payload: ProjectLinkPayload): ProjectLink { | ||
requireUserForCallUseCase(call) | ||
return createProjectLinkUseCase(payload, parent.id) ?: throw ControllerException( | ||
HttpStatusCode.InternalServerError, "error_internal" | ||
) | ||
} | ||
|
||
override suspend fun update( | ||
call: ApplicationCall, | ||
parent: Project, | ||
id: String, | ||
payload: ProjectLinkPayload, | ||
): ProjectLink { | ||
requireUserForCallUseCase(call) | ||
val link = getProjectLinkUseCase(id, parent.id) ?: throw ControllerException( | ||
HttpStatusCode.NotFound, "projects_not_found" | ||
) | ||
return updateProjectLinkUseCase(link.id, payload, parent.id) ?: throw ControllerException( | ||
HttpStatusCode.InternalServerError, "error_internal" | ||
) | ||
} | ||
|
||
override suspend fun delete(call: ApplicationCall, parent: Project, id: String) { | ||
requireUserForCallUseCase(call) | ||
val link = getProjectLinkUseCase(id, parent.id) ?: throw ControllerException( | ||
HttpStatusCode.NotFound, "projects_not_found" | ||
) | ||
if (!deleteProjectLinkUseCase(link.id, parent.id)) throw ControllerException( | ||
HttpStatusCode.InternalServerError, "error_internal" | ||
) | ||
} | ||
|
||
} |
43 changes: 43 additions & 0 deletions
43
...ommonMain/kotlin/me/nathanfallet/groupeminaste/controllers/projects/ProjectLinksRouter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package me.nathanfallet.groupeminaste.controllers.projects | ||
|
||
import io.ktor.util.reflect.* | ||
import me.nathanfallet.groupeminaste.controllers.models.AdminChildModelRouter | ||
import me.nathanfallet.groupeminaste.models.projects.Project | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLink | ||
import me.nathanfallet.groupeminaste.models.projects.ProjectLinkPayload | ||
import me.nathanfallet.groupeminaste.usecases.web.IGetAdminMenuForCallUseCase | ||
import me.nathanfallet.ktorx.routers.api.APIChildModelRouter | ||
import me.nathanfallet.ktorx.routers.concat.ConcatChildModelRouter | ||
import me.nathanfallet.ktorx.usecases.localization.IGetLocaleForCallUseCase | ||
import me.nathanfallet.usecases.localization.ITranslateUseCase | ||
|
||
class ProjectLinksRouter( | ||
controller: IProjectLinksController, | ||
getLocaleForCallUseCase: IGetLocaleForCallUseCase, | ||
translateUseCase: ITranslateUseCase, | ||
getAdminMenuForCallUseCase: IGetAdminMenuForCallUseCase, | ||
projectsRouter: ProjectsRouter, | ||
) : ConcatChildModelRouter<ProjectLink, String, ProjectLinkPayload, ProjectLinkPayload, Project, String>( | ||
APIChildModelRouter( | ||
typeInfo<ProjectLink>(), | ||
typeInfo<ProjectLinkPayload>(), | ||
typeInfo<ProjectLinkPayload>(), | ||
controller, | ||
IProjectLinksController::class, | ||
projectsRouter, | ||
prefix = "/api/v1", | ||
route = "links" | ||
), | ||
AdminChildModelRouter( | ||
typeInfo<ProjectLink>(), | ||
typeInfo<ProjectLinkPayload>(), | ||
typeInfo<ProjectLinkPayload>(), | ||
controller, | ||
IProjectLinksController::class, | ||
projectsRouter, | ||
getLocaleForCallUseCase, | ||
translateUseCase, | ||
getAdminMenuForCallUseCase, | ||
route = "links" | ||
) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters