Move paths to separated files
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import fr.dcproject.security.voter.ArticleVoter.Action.CREATE
|
||||
import fr.dcproject.security.voter.ArticleVoter.Action.VIEW
|
||||
import fr.dcproject.security.voter.assertCan
|
||||
import fr.postgresjson.repository.RepositoryI
|
||||
import io.ktor.application.call
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.Location
|
||||
import io.ktor.locations.get
|
||||
import io.ktor.locations.post
|
||||
import io.ktor.request.receive
|
||||
@@ -14,22 +15,34 @@ import io.ktor.routing.Route
|
||||
import fr.dcproject.entity.Article as ArticleEntity
|
||||
import fr.dcproject.repository.Article as ArticleRepository
|
||||
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object ArticlesPaths {
|
||||
@Location("/articles") class ArticlesRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/articles/{article}") class ArticleRequest(val article: fr.dcproject.entity.Article)
|
||||
@Location("/articles/{article}/follow") class ArticleFollowRequest(val article: fr.dcproject.entity.Article)
|
||||
@Location("/articles") class PostArticleRequest
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
fun Route.article(repo: ArticleRepository) {
|
||||
get<Paths.ArticlesRequest> {
|
||||
get<ArticlesPaths.ArticlesRequest> {
|
||||
assertCan(VIEW)
|
||||
|
||||
val articles = repo.find(it.page, it.limit, it.sort, it.direction, it.search)
|
||||
call.respond(articles)
|
||||
}
|
||||
|
||||
get<Paths.ArticleRequest> {
|
||||
get<ArticlesPaths.ArticleRequest> {
|
||||
assertCan(VIEW, it.article)
|
||||
|
||||
call.respond(it.article)
|
||||
}
|
||||
|
||||
post<Paths.PostArticleRequest> {
|
||||
post<ArticlesPaths.PostArticleRequest> {
|
||||
assertCan(CREATE)
|
||||
|
||||
val article = call.receive<ArticleEntity>()
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import com.fasterxml.jackson.databind.exc.MismatchedInputException
|
||||
import fr.dcproject.JwtConfig
|
||||
import io.ktor.application.call
|
||||
import io.ktor.auth.UserPasswordCredential
|
||||
import io.ktor.features.BadRequestException
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.Location
|
||||
import io.ktor.locations.post
|
||||
import io.ktor.request.receive
|
||||
import io.ktor.response.respondText
|
||||
@@ -16,10 +16,16 @@ import fr.dcproject.entity.Citizen as CitizenEntity
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.User as UserRepository
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object AuthPaths {
|
||||
@Location("/login") class LoginRequest
|
||||
@Location("/register") class RegisterRequest
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
@KtorExperimentalAPI
|
||||
fun Route.auth(userRepo: UserRepository, citizenRepo: CitizenRepository) {
|
||||
post <Paths.LoginRequest> {
|
||||
post <AuthPaths.LoginRequest> {
|
||||
try {
|
||||
val credentials = call.receive<UserPasswordCredential>()
|
||||
val user = userRepo.findByCredentials(credentials) ?: throw BadRequestException("Username not exist or password is wrong")
|
||||
@@ -29,7 +35,7 @@ fun Route.auth(userRepo: UserRepository, citizenRepo: CitizenRepository) {
|
||||
}
|
||||
}
|
||||
|
||||
post <Paths.RegisterRequest> {
|
||||
post <AuthPaths.RegisterRequest> {
|
||||
val citizen = call.receive<CitizenEntity>()
|
||||
val created = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request")
|
||||
|
||||
|
||||
@@ -1,25 +1,38 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import fr.dcproject.entity.Citizen
|
||||
import fr.dcproject.security.voter.CitizenVoter.Action.VIEW
|
||||
import fr.dcproject.security.voter.assertCan
|
||||
import fr.postgresjson.repository.RepositoryI
|
||||
import io.ktor.application.call
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.Location
|
||||
import io.ktor.locations.get
|
||||
import io.ktor.response.respond
|
||||
import io.ktor.routing.Route
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object CitizenPaths {
|
||||
@Location("/citizens") class CitizensRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/citizens/{citizen}") class CitizenRequest(val citizen: Citizen)
|
||||
@Location("/citizens/{citizen}/follows/articles") class CitizenFollowArticleRequest(val citizen: Citizen)
|
||||
@Location("/citizens/{citizen}/follows/constitutions") class CitizenFollowConstitutionRequest(val citizen: Citizen)
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
fun Route.citizen(repo: CitizenRepository) {
|
||||
get<Paths.CitizensRequest> {
|
||||
get<CitizenPaths.CitizensRequest> {
|
||||
assertCan(VIEW)
|
||||
|
||||
val citizens = repo.find(it.page, it.limit, it.sort, it.direction, it.search)
|
||||
call.respond(citizens)
|
||||
}
|
||||
|
||||
get<Paths.CitizenRequest> {
|
||||
get<CitizenPaths.CitizenRequest> {
|
||||
assertCan(VIEW, it.citizen)
|
||||
|
||||
call.respond(it.citizen)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import fr.postgresjson.repository.RepositoryI
|
||||
import io.ktor.application.call
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.Location
|
||||
import io.ktor.locations.get
|
||||
import io.ktor.locations.post
|
||||
import io.ktor.request.receive
|
||||
@@ -11,18 +12,29 @@ import io.ktor.routing.Route
|
||||
import fr.dcproject.entity.Constitution as ConstitutionEntity
|
||||
import fr.dcproject.repository.Constitution as ConstitutionRepository
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object ConstitutionPaths {
|
||||
@Location("/constitutions") class ConstitutionsRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/constitutions/{constitution}") class ConstitutionRequest(val constitution: fr.dcproject.entity.Constitution)
|
||||
@Location("/constitutions/{constitution}/follow") class ConstitutionFollowRequest(val constitution: fr.dcproject.entity.Constitution)
|
||||
@Location("/constitutions") class PostConstitutionRequest
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
fun Route.constitution(repo: ConstitutionRepository) {
|
||||
get<Paths.ConstitutionsRequest> {
|
||||
get<ConstitutionPaths.ConstitutionsRequest> {
|
||||
val constitutions = repo.find(it.page, it.limit, it.sort, it.direction, it.search)
|
||||
call.respond(constitutions)
|
||||
}
|
||||
|
||||
get<Paths.ConstitutionRequest> {
|
||||
get<ConstitutionPaths.ConstitutionRequest> {
|
||||
call.respond(it.constitution)
|
||||
}
|
||||
|
||||
post<Paths.PostConstitutionRequest>() {
|
||||
post<ConstitutionPaths.PostConstitutionRequest>() {
|
||||
val constitution = call.receive<ConstitutionEntity>()
|
||||
repo.upsert(constitution)
|
||||
call.respond(constitution)
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import fr.dcproject.entity.Citizen
|
||||
import fr.dcproject.entity.User
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.delete
|
||||
import io.ktor.locations.get
|
||||
import io.ktor.locations.post
|
||||
import io.ktor.locations.*
|
||||
import io.ktor.response.respond
|
||||
import io.ktor.routing.Route
|
||||
import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
import fr.dcproject.entity.Article as ArticleEntity
|
||||
import fr.dcproject.entity.Follow as FollowEntity
|
||||
import fr.dcproject.repository.FollowArticle as FollowArticleRepository
|
||||
|
||||
@@ -24,20 +21,26 @@ val currentCitizen = Citizen(
|
||||
user = User(username = "plop", plainPassword = "plip")
|
||||
)
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object FollowArticlePaths {
|
||||
@Location("/articles/{article}/follow") class ArticleFollowRequest(val article: ArticleEntity)
|
||||
@Location("/citizens/{citizen}/follows/articles") class CitizenFollowArticleRequest(val citizen: Citizen)
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
fun Route.followArticle(repo: FollowArticleRepository) {
|
||||
post<Paths.ArticleFollowRequest> {
|
||||
post<FollowArticlePaths.ArticleFollowRequest> {
|
||||
repo.follow(FollowEntity(target = it.article, citizen = currentCitizen))
|
||||
call.respond(HttpStatusCode.Created)
|
||||
}
|
||||
|
||||
delete<Paths.ArticleFollowRequest> {
|
||||
delete<FollowArticlePaths.ArticleFollowRequest> {
|
||||
repo.unfollow(FollowEntity(target = it.article, citizen = currentCitizen))
|
||||
call.respond(HttpStatusCode.NoContent)
|
||||
}
|
||||
|
||||
get<Paths.CitizenFollowArticleRequest> {
|
||||
val follows = repo.findByCitizenId(it.citizen)
|
||||
get<FollowArticlePaths.CitizenFollowArticleRequest> {
|
||||
val follows = repo.findByCitizen(it.citizen)
|
||||
call.respond(follows)
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,15 @@
|
||||
package fr.dcproject.routes
|
||||
|
||||
import Paths
|
||||
import fr.dcproject.entity.Citizen
|
||||
import fr.dcproject.entity.User
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.delete
|
||||
import io.ktor.locations.get
|
||||
import io.ktor.locations.post
|
||||
import io.ktor.locations.*
|
||||
import io.ktor.response.respond
|
||||
import io.ktor.routing.Route
|
||||
import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
import fr.dcproject.entity.Constitution as ConstitutionEntity
|
||||
import fr.dcproject.entity.Follow as FollowEntity
|
||||
import fr.dcproject.repository.FollowConstitution as FollowConstitutionRepository
|
||||
|
||||
@@ -24,20 +21,26 @@ val currentCitizen2 = Citizen(
|
||||
user = User(username = "plop", plainPassword = "plip")
|
||||
)
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object FollowConstitutionPaths {
|
||||
@Location("/constitutions/{constitution}/follow") class ConstitutionFollowRequest(val constitution: ConstitutionEntity)
|
||||
@Location("/citizens/{citizen}/follows/constitutions") class CitizenFollowConstitutionRequest(val citizen: Citizen)
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
fun Route.followConstitution(repo: FollowConstitutionRepository) {
|
||||
post<Paths.ConstitutionFollowRequest> {
|
||||
post<FollowConstitutionPaths.ConstitutionFollowRequest> {
|
||||
repo.follow(FollowEntity(target = it.constitution, citizen = currentCitizen2))
|
||||
call.respond(HttpStatusCode.Created)
|
||||
}
|
||||
|
||||
delete<Paths.ConstitutionFollowRequest> {
|
||||
delete<FollowConstitutionPaths.ConstitutionFollowRequest> {
|
||||
repo.unfollow(FollowEntity(target = it.constitution, citizen = currentCitizen2))
|
||||
call.respond(HttpStatusCode.NoContent)
|
||||
}
|
||||
|
||||
get<Paths.CitizenFollowConstitutionRequest> {
|
||||
val follows = repo.findByCitizenId(it.citizen)
|
||||
get<FollowConstitutionPaths.CitizenFollowConstitutionRequest> {
|
||||
val follows = repo.findByCitizen(it.citizen)
|
||||
call.respond(follows)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
import fr.dcproject.entity.Article
|
||||
import fr.dcproject.entity.Citizen
|
||||
import fr.dcproject.entity.Constitution
|
||||
import fr.postgresjson.repository.RepositoryI.Direction
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.locations.Location
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
object Paths {
|
||||
@Location("/login") class LoginRequest
|
||||
@Location("/register") class RegisterRequest
|
||||
|
||||
@Location("/articles") class ArticlesRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/articles/{article}") class ArticleRequest(val article: Article)
|
||||
@Location("/articles/{article}/follow") class ArticleFollowRequest(val article: Article)
|
||||
@Location("/articles") class PostArticleRequest
|
||||
|
||||
|
||||
@Location("/constitutions") class ConstitutionsRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/constitutions/{constitution}") class ConstitutionRequest(val constitution: Constitution)
|
||||
@Location("/constitutions/{constitution}/follow") class ConstitutionFollowRequest(val constitution: Constitution)
|
||||
@Location("/constitutions") class PostConstitutionRequest
|
||||
|
||||
|
||||
@Location("/citizens") class CitizensRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: Direction? = null, val search: String? = null) {
|
||||
val page: Int = if (page < 1) 1 else page
|
||||
val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit
|
||||
}
|
||||
@Location("/citizens/{citizen}") class CitizenRequest(val citizen: Citizen)
|
||||
@Location("/citizens/{citizen}/follows/articles") class CitizenFollowArticleRequest(val citizen: Citizen)
|
||||
@Location("/citizens/{citizen}/follows/constitutions") class CitizenFollowConstitutionRequest(val citizen: Citizen)
|
||||
}
|
||||
Reference in New Issue
Block a user