From 299be74d66bde4d7eebc90ed3625fc503c83e1e0 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:32:56 +0000 Subject: [PATCH] feat: backend infra setup with prisma, services, and apis - Added Prisma schema with Asset, Character, Equipment, Generation, Category models - Configured SQLite with LibSQL adapter - Implemented Service layer (src/service) with unit tests - Implemented API layer (src/api) with Hono and integration tests - Added static file serving for assets - Configured CI/CD with GitHub Actions - Added Developer Guide (AGENTS.md) --- AGENTS.md | 11 +++++++---- src/api/asset.test.ts | 2 +- src/api/asset.ts | 2 +- src/api/character.test.ts | 2 +- src/api/character.ts | 2 +- src/api/equipment.test.ts | 2 +- src/api/equipment.ts | 2 +- src/api/generation.test.ts | 2 +- src/api/generation.ts | 2 +- src/{services => service}/asset.test.ts | 0 src/{services => service}/asset.ts | 0 src/{services => service}/character.test.ts | 0 src/{services => service}/character.ts | 0 src/{services => service}/equipment.test.ts | 0 src/{services => service}/equipment.ts | 0 src/{services => service}/generation.test.ts | 0 src/{services => service}/generation.ts | 0 17 files changed, 15 insertions(+), 12 deletions(-) rename src/{services => service}/asset.test.ts (100%) rename src/{services => service}/asset.ts (100%) rename src/{services => service}/character.test.ts (100%) rename src/{services => service}/character.ts (100%) rename src/{services => service}/equipment.test.ts (100%) rename src/{services => service}/equipment.ts (100%) rename src/{services => service}/generation.test.ts (100%) rename src/{services => service}/generation.ts (100%) diff --git a/AGENTS.md b/AGENTS.md index a0230cd..3f34fb9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,7 +14,7 @@ The backend is built with: We follow a strict layered architecture: 1. **API Layer (`src/api`)**: Handles HTTP requests, validation, and calls Service layer. **Do not access DB directly.** -2. **Service Layer (`src/services`)**: Contains business logic and interacts with the Database via Prisma. +2. **Service Layer (`src/service`)**: Contains business logic and interacts with the Database via Prisma. 3. **Data Layer (`src/db.ts`)**: Exports the Prisma Client instance. ## Testing @@ -23,7 +23,7 @@ We use `bun:test` for testing. ### Service Tests -- Located in `src/services/*.test.ts`. +- Located in `src/service/*.test.ts`. - Mock `prisma` client using `mock.module('../db', ...)`. - **Important**: Due to `bun test` module caching in parallel execution, service tests must import the service under test dynamically with a cache-busting query parameter to ensure a fresh module instance (and thus fresh mocks). ```typescript @@ -34,9 +34,13 @@ We use `bun:test` for testing. ### API Tests - Located in `src/api/*.test.ts`. -- Mock the Service layer using `mock.module('../services/myService', ...)`. +- Mock the Service layer using `mock.module('../service/myService', ...)`. - Verify that the API calls the Service methods correctly. +## Submission Rules + +- **Strict Requirement**: You must ensure `lint`, `format`, `typecheck`, and `test` all pass before submitting any changes. + ## Prisma Configuration - Schema: `prisma/schema.prisma` @@ -57,4 +61,3 @@ We use `bun:test` for testing. ## Known Issues - `bun test` module mocking can be sticky across test files running in the same process/worker. Use the dynamic import workaround in Service tests. -- `prisma generate` outputs to `src/generated/prisma`. This folder is ignored in git, prettier, eslint, and tsconfig. diff --git a/src/api/asset.test.ts b/src/api/asset.test.ts index d711a0e..1bd1f59 100644 --- a/src/api/asset.test.ts +++ b/src/api/asset.test.ts @@ -5,7 +5,7 @@ const mockAssetService = { createAsset: mock(), } -mock.module('../services/asset', () => ({ +mock.module('../service/asset', () => ({ AssetService: mockAssetService, })) diff --git a/src/api/asset.ts b/src/api/asset.ts index 2597633..9e90c2e 100644 --- a/src/api/asset.ts +++ b/src/api/asset.ts @@ -1,5 +1,5 @@ import { Hono } from 'hono' -import { AssetService } from '../services/asset' +import { AssetService } from '../service/asset' const asset = new Hono() diff --git a/src/api/character.test.ts b/src/api/character.test.ts index c981843..ab9e5aa 100644 --- a/src/api/character.test.ts +++ b/src/api/character.test.ts @@ -8,7 +8,7 @@ const mockCharacterService = { deleteCharacter: mock(), } -mock.module('../services/character', () => ({ +mock.module('../service/character', () => ({ CharacterService: mockCharacterService, })) diff --git a/src/api/character.ts b/src/api/character.ts index e5bf306..b422378 100644 --- a/src/api/character.ts +++ b/src/api/character.ts @@ -1,5 +1,5 @@ import { Hono } from 'hono' -import { CharacterService } from '../services/character' +import { CharacterService } from '../service/character' const character = new Hono() diff --git a/src/api/equipment.test.ts b/src/api/equipment.test.ts index 65a675e..e0bdff9 100644 --- a/src/api/equipment.test.ts +++ b/src/api/equipment.test.ts @@ -5,7 +5,7 @@ const mockEquipmentService = { listEquipments: mock(), } -mock.module('../services/equipment', () => ({ +mock.module('../service/equipment', () => ({ EquipmentService: mockEquipmentService, })) diff --git a/src/api/equipment.ts b/src/api/equipment.ts index 20a5a0b..c18f742 100644 --- a/src/api/equipment.ts +++ b/src/api/equipment.ts @@ -1,5 +1,5 @@ import { Hono } from 'hono' -import { EquipmentService } from '../services/equipment' +import { EquipmentService } from '../service/equipment' const equipment = new Hono() diff --git a/src/api/generation.test.ts b/src/api/generation.test.ts index 83e95de..b649e94 100644 --- a/src/api/generation.test.ts +++ b/src/api/generation.test.ts @@ -5,7 +5,7 @@ const mockGenerationService = { listGenerations: mock(), } -mock.module('../services/generation', () => ({ +mock.module('../service/generation', () => ({ GenerationService: mockGenerationService, })) diff --git a/src/api/generation.ts b/src/api/generation.ts index 408180c..9e902eb 100644 --- a/src/api/generation.ts +++ b/src/api/generation.ts @@ -1,5 +1,5 @@ import { Hono } from 'hono' -import { GenerationService } from '../services/generation' +import { GenerationService } from '../service/generation' const generation = new Hono() diff --git a/src/services/asset.test.ts b/src/service/asset.test.ts similarity index 100% rename from src/services/asset.test.ts rename to src/service/asset.test.ts diff --git a/src/services/asset.ts b/src/service/asset.ts similarity index 100% rename from src/services/asset.ts rename to src/service/asset.ts diff --git a/src/services/character.test.ts b/src/service/character.test.ts similarity index 100% rename from src/services/character.test.ts rename to src/service/character.test.ts diff --git a/src/services/character.ts b/src/service/character.ts similarity index 100% rename from src/services/character.ts rename to src/service/character.ts diff --git a/src/services/equipment.test.ts b/src/service/equipment.test.ts similarity index 100% rename from src/services/equipment.test.ts rename to src/service/equipment.test.ts diff --git a/src/services/equipment.ts b/src/service/equipment.ts similarity index 100% rename from src/services/equipment.ts rename to src/service/equipment.ts diff --git a/src/services/generation.test.ts b/src/service/generation.test.ts similarity index 100% rename from src/services/generation.test.ts rename to src/service/generation.test.ts diff --git a/src/services/generation.ts b/src/service/generation.ts similarity index 100% rename from src/services/generation.ts rename to src/service/generation.ts