feat: add 3 new API endpoints (#24)
ci/woodpecker/push/govulncheck Pipeline was successful Details
ci/woodpecker/push/test Pipeline was successful Details

Reviewed-on: twhelp/corev3#24
This commit is contained in:
Dawid Wysokiński 2024-03-11 12:08:51 +00:00
parent db528e125e
commit 6901c551e8
4 changed files with 2399 additions and 3 deletions

View File

@ -325,6 +325,75 @@ paths:
$ref: "#/components/responses/ListEnnoblementsResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/players/{playerId}/ennoblements:
get:
operationId: listPlayerEnnoblements
tags:
- versions
- servers
- players
- ennoblements
description: List player ennoblements
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
- $ref: "#/components/parameters/PlayerIdPathParam"
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
- $ref: "#/components/parameters/EnnoblementSortQueryParam"
- $ref: "#/components/parameters/SinceQueryParam"
- $ref: "#/components/parameters/BeforeQueryParam"
responses:
200:
$ref: "#/components/responses/ListEnnoblementsResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/tribes/{tribeId}/ennoblements:
get:
operationId: listTribeEnnoblements
tags:
- versions
- servers
- tribes
- ennoblements
description: List tribe ennoblements
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
- $ref: "#/components/parameters/TribeIdPathParam"
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
- $ref: "#/components/parameters/EnnoblementSortQueryParam"
- $ref: "#/components/parameters/SinceQueryParam"
- $ref: "#/components/parameters/BeforeQueryParam"
responses:
200:
$ref: "#/components/responses/ListEnnoblementsResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/villages/{villageId}/ennoblements:
get:
operationId: listVillageEnnoblements
tags:
- versions
- servers
- villages
- ennoblements
description: List village ennoblements
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
- $ref: "#/components/parameters/VillageIdPathParam"
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
- $ref: "#/components/parameters/EnnoblementSortQueryParam"
- $ref: "#/components/parameters/SinceQueryParam"
- $ref: "#/components/parameters/BeforeQueryParam"
responses:
200:
$ref: "#/components/responses/ListEnnoblementsResponse"
default:
$ref: "#/components/responses/ErrorResponse"
components:
schemas:
Error:

View File

@ -118,7 +118,7 @@ func (a listEnnoblementsParamsApplier) apply(q *bun.SelectQuery) *bun.SelectQuer
q = q.Where("ennoblement.server_key IN (?)", bun.In(serverKeys))
}
if villageIDs := a.params.PlayerIDs(); len(villageIDs) > 0 {
if villageIDs := a.params.VillageIDs(); len(villageIDs) > 0 {
q = q.Where("ennoblement.village_id IN (?)", bun.In(villageIDs))
}

View File

@ -83,6 +83,249 @@ func (h *apiHTTPHandler) ListEnnoblements(
renderJSON(w, r, http.StatusOK, apimodel.NewListEnnoblementsResponse(res))
}
//nolint:gocyclo
func (h *apiHTTPHandler) ListPlayerEnnoblements(
w http.ResponseWriter,
r *http.Request,
_ apimodel.VersionCodePathParam,
serverKey apimodel.ServerKeyPathParam,
playerID apimodel.PlayerIdPathParam,
params apimodel.ListPlayerEnnoblementsParams,
) {
domainParams := domain.NewListEnnoblementsParams()
if err := domainParams.SetSort([]domain.EnnoblementSort{domain.EnnoblementSortIDASC}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if err := domainParams.SetPlayerIDs([]int{playerID}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Sort != nil {
if err := domainParams.PrependSortString(*params.Sort); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
} else {
if err := domainParams.PrependSortString([]string{domain.EnnoblementSortCreatedAtASC.String()}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if err := domainParams.SetServerKeys([]string{serverKey}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Before != nil {
if err := domainParams.SetBefore(domain.NullTime{
V: *params.Before,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Since != nil {
if err := domainParams.SetSince(domain.NullTime{
V: *params.Since,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Limit != nil {
if err := domainParams.SetLimit(*params.Limit); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Cursor != nil {
if err := domainParams.SetEncodedCursor(*params.Cursor); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
res, err := h.ennoblementSvc.ListWithRelations(r.Context(), domainParams)
if err != nil {
h.errorRenderer.render(w, r, err)
return
}
renderJSON(w, r, http.StatusOK, apimodel.NewListEnnoblementsResponse(res))
}
//nolint:gocyclo
func (h *apiHTTPHandler) ListTribeEnnoblements(
w http.ResponseWriter,
r *http.Request,
_ apimodel.VersionCodePathParam,
serverKey apimodel.ServerKeyPathParam,
tribeID apimodel.TribeIdPathParam,
params apimodel.ListTribeEnnoblementsParams,
) {
domainParams := domain.NewListEnnoblementsParams()
if err := domainParams.SetSort([]domain.EnnoblementSort{domain.EnnoblementSortIDASC}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if err := domainParams.SetTribeIDs([]int{tribeID}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Sort != nil {
if err := domainParams.PrependSortString(*params.Sort); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
} else {
if err := domainParams.PrependSortString([]string{domain.EnnoblementSortCreatedAtASC.String()}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if err := domainParams.SetServerKeys([]string{serverKey}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Before != nil {
if err := domainParams.SetBefore(domain.NullTime{
V: *params.Before,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Since != nil {
if err := domainParams.SetSince(domain.NullTime{
V: *params.Since,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Limit != nil {
if err := domainParams.SetLimit(*params.Limit); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Cursor != nil {
if err := domainParams.SetEncodedCursor(*params.Cursor); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
res, err := h.ennoblementSvc.ListWithRelations(r.Context(), domainParams)
if err != nil {
h.errorRenderer.render(w, r, err)
return
}
renderJSON(w, r, http.StatusOK, apimodel.NewListEnnoblementsResponse(res))
}
//nolint:gocyclo
func (h *apiHTTPHandler) ListVillageEnnoblements(
w http.ResponseWriter,
r *http.Request,
_ apimodel.VersionCodePathParam,
serverKey apimodel.ServerKeyPathParam,
villageID apimodel.VillageIdPathParam,
params apimodel.ListVillageEnnoblementsParams,
) {
domainParams := domain.NewListEnnoblementsParams()
if err := domainParams.SetSort([]domain.EnnoblementSort{domain.EnnoblementSortIDASC}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if err := domainParams.SetVillageIDs([]int{villageID}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Sort != nil {
if err := domainParams.PrependSortString(*params.Sort); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
} else {
if err := domainParams.PrependSortString([]string{domain.EnnoblementSortCreatedAtASC.String()}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if err := domainParams.SetServerKeys([]string{serverKey}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
if params.Before != nil {
if err := domainParams.SetBefore(domain.NullTime{
V: *params.Before,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Since != nil {
if err := domainParams.SetSince(domain.NullTime{
V: *params.Since,
Valid: true,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Limit != nil {
if err := domainParams.SetLimit(*params.Limit); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
if params.Cursor != nil {
if err := domainParams.SetEncodedCursor(*params.Cursor); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}
}
res, err := h.ennoblementSvc.ListWithRelations(r.Context(), domainParams)
if err != nil {
h.errorRenderer.render(w, r, err)
return
}
renderJSON(w, r, http.StatusOK, apimodel.NewListEnnoblementsResponse(res))
}
func formatListEnnoblementsErrorPath(segments []domain.ErrorPathSegment) []string {
if segments[0].Model != "ListEnnoblementsParams" {
return nil

File diff suppressed because it is too large Load Diff