package se.senashdev.projekt.api import se.rutdev.projekt.api.HttpProtocol.VersionedResponse import se.rutdev.framework.json.circe.RutUtilsCodec import se.rutdev.framework import se.rutdev.framework.service.api.{OAuthUtils, RequestMeta, RutTapir} import se.rutdev.pd.ProblemDetailProtocol.ProblemDetail import sttp.tapir.Schema class Endpoints(override val config: OAuthUtils.OAuthConfig) extends framework.service.api.Endpoints with RutTapir with RutUtilsCodec: type ApiEndpoint[I, O] = OAuthEndpoint[RequestMeta.OAuthRequestMeta, I, ProblemDetail, O] <#list datatypes as datatype> case class ${datatype.name}( <#list datatype.fields as field> ${field.name} : ${field.type}, ) <#list endpoints as endpoint> case class ${endpoint.handler.name?cap_first}( <#list endpoint.handler.fields as field> ${field.name} : ${field.type}, ) <#list datatypes as datatype> given Codec[${datatype.name?cap_first}] = deriveCodec <#list endpoints as endpoint> given Codec[${endpoint.handler.name?cap_first}] = deriveCodec <#list endpoints as endpoint> val ${endpoint.handler.name}Endpoint = ApiEndpoint[${endpoint.handler.name?cap_first}, VersionedResponse] = <#list endpoint.paths.paths> apiV1Endpoint .post <#items as segment> .in("${segment}") .post .in(jsonBody[${endpoint.handler.name?cap_first}]) .out(jsonBody[VersionedResponse])