Freemarker templates

This commit is contained in:
Johan Maasing 2025-04-01 20:38:42 +02:00
parent 8057928548
commit d41212c7b2
5 changed files with 72 additions and 20 deletions

View file

@ -0,0 +1,6 @@
package se.senashdev.projekt.api
object Codecs:
<#list typeDefinitions as type>
given Codec[${type.name?cap_first}] = deriveCodec
</#list>

View file

@ -0,0 +1,27 @@
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
import se.senashdev.projekt.api.Protocol.*
import se.senashdev.projekt.api.Codecs._
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 endpoints as endpoint>
val ${endpoint.inputType}Endpoint = ApiEndpoint[${endpoint.inputType?cap_first}, VersionedResponse] =
<#list endpoint.paths.paths>
apiV1Endpoint
.post
<#items as segment>
.in("${segment}")
</#items>
.in(jsonBody[${endpoint.inputType?cap_first}])
.out(jsonBody[VersionedResponse])
</#list>
</#list>

View file

@ -0,0 +1,10 @@
package se.senashdev.projekt.api
object Protocol:
<#list typeDefinitions as type>
case class ${type.name?cap_first}(
<#list type.fields as field>
${field.name} : ${field.type},
</#list>
)
</#list>