From aa208d07ada1e18e6de684404a8bf75799cb1ce6 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Wed, 5 Aug 2020 03:08:36 -0300 Subject: [PATCH] feat(backend): Return tag along with related repos --- .../src/com/grohden/repotagger/api/UserTag.kt | 21 ++++++++++++++++--- .../com/grohden/repotagger/RepositoryTest.kt | 5 +++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/backend/src/com/grohden/repotagger/api/UserTag.kt b/backend/src/com/grohden/repotagger/api/UserTag.kt index 8dd177c..4d7df07 100644 --- a/backend/src/com/grohden/repotagger/api/UserTag.kt +++ b/backend/src/com/grohden/repotagger/api/UserTag.kt @@ -13,6 +13,12 @@ import io.ktor.routing.get import io.ktor.routing.post import io.ktor.routing.route + +data class TagRepositoriesResponse( + val tag: UserTagDTO, + val repositories: List +) + fun Route.userTag( githubClient: GithubClient, dao: DAOFacade @@ -35,19 +41,28 @@ fun Route.userTag( /** - * Lists all repositories by a tag + * Lists all repositories by a tag id * - * Returns OK and a list of [DetailedRepository] + * Returns OK and a list of [TagRepositoriesResponse] */ get("/{tagId}/repositories") { val tagId = call.requireIntParam("tagId") val session = call.requireSession() + val tag = dao.findUserTagById( + userGithubId = session.githubUserId, + tagId = tagId + ) ?: throw NotFound("tag not found") val repositories = dao.findRepositoriesByUserTag( userGithubId = session.githubUserId, tagId = tagId ).toSimpleRepositoryList() - call.respond(HttpStatusCode.OK, repositories) + call.respond( + HttpStatusCode.OK, TagRepositoriesResponse( + tag = tag, + repositories = repositories + ) + ) } /** diff --git a/backend/test/com/grohden/repotagger/RepositoryTest.kt b/backend/test/com/grohden/repotagger/RepositoryTest.kt index aebd150..9f90034 100644 --- a/backend/test/com/grohden/repotagger/RepositoryTest.kt +++ b/backend/test/com/grohden/repotagger/RepositoryTest.kt @@ -2,6 +2,7 @@ package com.grohden.repotagger import com.grohden.repotagger.api.DetailedRepository import com.grohden.repotagger.api.SimpleRepository +import com.grohden.repotagger.api.TagRepositoriesResponse import com.grohden.repotagger.dao.CreateTagInput import com.grohden.repotagger.dao.tables.UserTagDTO import com.grohden.repotagger.extensions.fromJson @@ -88,8 +89,8 @@ class RepositoryTest : BaseTest() { response.content shouldNotBe null val remoteTags = response.content!!.let { - gson.fromJson>(it) - }.map { it.githubId } + gson.fromJson(it) + }.repositories.map { it.githubId } remoteTags shouldContainAll listOf( defaultRepoId,