From 9185367fcd7d95af89fac36dd892d8b064dbd94f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 14 Feb 2026 20:32:47 +0900 Subject: feat(openapi): generate OpenAPI specs from TypeSpec sources Migrate hand-written OpenAPI YAML to TypeSpec (.tsp) source files. TypeSpec compiles to OpenAPI 3.0 YAML, enabling type-safe API definitions. - Add typespec/ directory with api-server and fortee definitions - Integrate TypeSpec build into `just gen` and `just build` pipelines - Update backend handler code to match new generated type names (inlined error responses, separate GameType/ProblemLanguage enums) - Regenerate frontend TypeScript types from new OpenAPI output Co-Authored-By: Claude Opus 4.6 --- typespec/fortee/main.tsp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 typespec/fortee/main.tsp (limited to 'typespec/fortee/main.tsp') diff --git a/typespec/fortee/main.tsp b/typespec/fortee/main.tsp new file mode 100644 index 0000000..03683a7 --- /dev/null +++ b/typespec/fortee/main.tsp @@ -0,0 +1,45 @@ +import "@typespec/http"; +import "@typespec/openapi"; +import "@typespec/openapi3"; + +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +@service(#{ + title: "fortee API", +}) +@info(#{ + version: "0.1.0", +}) +namespace ForteeApi; + +@route("/api/user/login") +@post +@operationId("postLogin") +op postLogin( + @header contentType: "application/x-www-form-urlencoded", + @body body: { + username: string; + password: string; + }, +): { + @body body: { + loggedIn: boolean; + user?: { + username: string; + }; + }; +}; + +@route("/api/user/view/{username}") +@get +@operationId("getUser") +op getUser(@path username: string): { + @body body: { + uuid: string; + username: string; + avatar_url: string; + }; +} | { + @statusCode statusCode: 404; +}; -- cgit v1.3.1