feat: complete Phase 1 foundation scaffold
Some checks failed
CI / Lint (push) Has been cancelled
CI / TypeCheck (push) Has been cancelled
CI / Test (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/api/Dockerfile name:api]) (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/cms/Dockerfile name:cms]) (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/web/Dockerfile name:web]) (push) Has been cancelled
CI / Build (push) Has been cancelled
Deploy / Deploy (push) Has been cancelled
Some checks failed
CI / Lint (push) Has been cancelled
CI / TypeCheck (push) Has been cancelled
CI / Test (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/api/Dockerfile name:api]) (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/cms/Dockerfile name:cms]) (push) Has been cancelled
Deploy / Docker Build & Push (map[context:. dockerfile:apps/web/Dockerfile name:web]) (push) Has been cancelled
CI / Build (push) Has been cancelled
Deploy / Deploy (push) Has been cancelled
- Monorepo: Turborepo + pnpm workspaces with 7 apps/packages - Backend: NestJS scaffold with 9 modules (auth, tenant, curriculum, simulation, portfolio, ai-coach, analytics, classroom, gamification) - Frontend: React 18 + Vite + TailwindCSS + shadcn/ui with 10 pages, 14 UI primitives, 3 Zustand stores - Database: Prisma schema with 19 models, 13 enums, seed script, multi-tenant ready - Docker: Dev, production, and Portainer Compose files with Traefik reverse proxy - Configuration: .env.example (47 vars), Zod validation, frontend-safe env exposure - i18n: English + Greek locale files (10 files), ICU MessageFormat, react-i18next - Shared packages: @investplay/types, @investplay/ui, @investplay/i18n, @investplay/utils - CI/CD: GitHub Actions (lint, typecheck, test, build, deploy, PR checks) - Documentation: CONTEXT.md, ARCHITECTURE.md (10 Mermaid diagrams), API.md, LOCALIZATION.md, DEVELOPMENT-ROADMAP.md - Infrastructure: Dockerfiles (dev + prod), nginx configs, backup/healthcheck scripts - Security: JWT auth guards, role-based access, rate limiting, Helmet, CORS, PII sanitization
This commit is contained in:
14
apps/api/src/modules/auth/dto/login.input.ts
Normal file
14
apps/api/src/modules/auth/dto/login.input.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Field, InputType } from "@nestjs/graphql";
|
||||
import { IsEmail, IsString, MinLength } from "class-validator";
|
||||
|
||||
@InputType()
|
||||
export class LoginInput {
|
||||
@Field()
|
||||
@IsEmail()
|
||||
email: string;
|
||||
|
||||
@Field()
|
||||
@IsString()
|
||||
@MinLength(1)
|
||||
password: string;
|
||||
}
|
||||
34
apps/api/src/modules/auth/dto/register.input.ts
Normal file
34
apps/api/src/modules/auth/dto/register.input.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Field, InputType, Boolean as GraphQLBoolean } from "@nestjs/graphql";
|
||||
import { IsEmail, IsString, MinLength, IsBoolean, IsOptional, IsIn } from "class-validator";
|
||||
|
||||
@InputType()
|
||||
export class RegisterInput {
|
||||
@Field()
|
||||
@IsEmail()
|
||||
email: string;
|
||||
|
||||
@Field()
|
||||
@IsString()
|
||||
@MinLength(8)
|
||||
password: string;
|
||||
|
||||
@Field()
|
||||
@IsString()
|
||||
@MinLength(1)
|
||||
firstName: string;
|
||||
|
||||
@Field()
|
||||
@IsString()
|
||||
@MinLength(1)
|
||||
lastName: string;
|
||||
|
||||
@Field({ nullable: true, defaultValue: "en" })
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
@IsIn(["en", "el"])
|
||||
locale?: string;
|
||||
|
||||
@Field(() => GraphQLBoolean)
|
||||
@IsBoolean()
|
||||
acceptTerms: boolean;
|
||||
}
|
||||
13
apps/api/src/modules/auth/dto/token-response.dto.ts
Normal file
13
apps/api/src/modules/auth/dto/token-response.dto.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Field, ObjectType, Int } from "@nestjs/graphql";
|
||||
|
||||
@ObjectType()
|
||||
export class TokenResponse {
|
||||
@Field()
|
||||
accessToken: string;
|
||||
|
||||
@Field()
|
||||
refreshToken: string;
|
||||
|
||||
@Field(() => Int)
|
||||
expiresIn: number;
|
||||
}
|
||||
Reference in New Issue
Block a user