wexts 4.1.0 → 4.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +49 -49
  2. package/bin/wexts.cjs +2 -2
  3. package/package.json +153 -148
  4. package/templates/.dockerignore +43 -43
  5. package/templates/.env.example +17 -17
  6. package/templates/Dockerfile +60 -60
  7. package/templates/Procfile +1 -1
  8. package/templates/README.md +67 -67
  9. package/templates/api-sdk.ts +115 -115
  10. package/templates/docker-compose.yml +34 -34
  11. package/templates/nestjs-api/.env.example +3 -3
  12. package/templates/nestjs-api/README.md +87 -87
  13. package/templates/nestjs-api/nest-cli.json +6 -6
  14. package/templates/nestjs-api/package.json +40 -40
  15. package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +24 -24
  16. package/templates/nestjs-api/prisma/migrations/migration_lock.toml +3 -3
  17. package/templates/nestjs-api/prisma/schema.prisma +29 -29
  18. package/templates/nestjs-api/src/app.module.ts +17 -17
  19. package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
  20. package/templates/nestjs-api/src/auth/auth.module.ts +37 -37
  21. package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
  22. package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
  23. package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
  24. package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -27
  25. package/templates/nestjs-api/src/main.ts +32 -32
  26. package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
  27. package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
  28. package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
  29. package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
  30. package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
  31. package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
  32. package/templates/nestjs-api/src/users/users.controller.ts +14 -14
  33. package/templates/nestjs-api/src/users/users.module.ts +12 -12
  34. package/templates/nestjs-api/src/users/users.service.ts +19 -19
  35. package/templates/nestjs-api/tsconfig.json +39 -39
  36. package/templates/nextjs-web/README.md +76 -76
  37. package/templates/nextjs-web/app/actions/auth.ts +108 -108
  38. package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
  39. package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
  40. package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
  41. package/templates/nextjs-web/app/globals.css +93 -93
  42. package/templates/nextjs-web/app/layout.tsx +29 -29
  43. package/templates/nextjs-web/app/login/page.tsx +5 -5
  44. package/templates/nextjs-web/app/page.tsx +28 -28
  45. package/templates/nextjs-web/app/register/page.tsx +5 -5
  46. package/templates/nextjs-web/components/ui/button.tsx +56 -56
  47. package/templates/nextjs-web/components/ui/card.tsx +79 -79
  48. package/templates/nextjs-web/components/ui/input.tsx +25 -25
  49. package/templates/nextjs-web/components/ui/label.tsx +24 -24
  50. package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
  51. package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
  52. package/templates/nextjs-web/features/auth/api.ts +35 -35
  53. package/templates/nextjs-web/features/auth/index.ts +3 -3
  54. package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
  55. package/templates/nextjs-web/features/dashboard/api.ts +9 -9
  56. package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
  57. package/templates/nextjs-web/features/dashboard/index.ts +3 -3
  58. package/templates/nextjs-web/hooks/index.ts +4 -4
  59. package/templates/nextjs-web/lib/api-client.ts +89 -89
  60. package/templates/nextjs-web/lib/api.ts +115 -115
  61. package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
  62. package/templates/nextjs-web/lib/utils.ts +6 -6
  63. package/templates/nextjs-web/lib/wexts-client.ts +4 -4
  64. package/templates/nextjs-web/next-env.d.ts +6 -6
  65. package/templates/nextjs-web/next.config.ts +20 -20
  66. package/templates/nextjs-web/package.json +37 -37
  67. package/templates/nextjs-web/postcss.config.js +6 -6
  68. package/templates/nextjs-web/tailwind.config.ts +69 -69
  69. package/templates/nextjs-web/tsconfig.json +41 -41
  70. package/templates/nixpacks.toml +11 -11
  71. package/templates/root-package.json +31 -31
  72. package/templates/server.ts +66 -66
  73. package/templates/tsconfig.json +30 -30
  74. package/dist/chunk-2KAQYLVN.js +0 -1
  75. package/dist/chunk-2KAQYLVN.js.map +0 -1
  76. package/dist/chunk-2LJVUMXW.js +0 -228
  77. package/dist/chunk-2LJVUMXW.js.map +0 -1
  78. package/dist/chunk-342VRT25.mjs +0 -504
  79. package/dist/chunk-342VRT25.mjs.map +0 -1
  80. package/dist/chunk-7HNQWJWV.js +0 -504
  81. package/dist/chunk-7HNQWJWV.js.map +0 -1
  82. package/dist/chunk-7QKLIVRF.js +0 -94
  83. package/dist/chunk-7QKLIVRF.js.map +0 -1
  84. package/dist/chunk-7SSCNCTW.mjs +0 -137
  85. package/dist/chunk-7SSCNCTW.mjs.map +0 -1
  86. package/dist/chunk-7TLSPR65.mjs +0 -95
  87. package/dist/chunk-7TLSPR65.mjs.map +0 -1
  88. package/dist/chunk-7WULUGLH.mjs +0 -22
  89. package/dist/chunk-7WULUGLH.mjs.map +0 -1
  90. package/dist/chunk-AVMQJWYD.js +0 -95
  91. package/dist/chunk-AVMQJWYD.js.map +0 -1
  92. package/dist/chunk-BG56B4DE.js +0 -106
  93. package/dist/chunk-BG56B4DE.js.map +0 -1
  94. package/dist/chunk-CLM5PNSG.mjs +0 -496
  95. package/dist/chunk-CLM5PNSG.mjs.map +0 -1
  96. package/dist/chunk-DNLGCKTT.js +0 -31
  97. package/dist/chunk-DNLGCKTT.js.map +0 -1
  98. package/dist/chunk-JHOVXH3X.mjs +0 -65
  99. package/dist/chunk-JHOVXH3X.mjs.map +0 -1
  100. package/dist/chunk-MXINIFPC.js +0 -105
  101. package/dist/chunk-MXINIFPC.js.map +0 -1
  102. package/dist/chunk-O4II6N34.js +0 -137
  103. package/dist/chunk-O4II6N34.js.map +0 -1
  104. package/dist/chunk-SE32ZPOZ.js +0 -496
  105. package/dist/chunk-SE32ZPOZ.js.map +0 -1
  106. package/dist/chunk-UAL54DVV.mjs +0 -106
  107. package/dist/chunk-UAL54DVV.mjs.map +0 -1
  108. package/dist/chunk-WCKSKU3C.js +0 -65
  109. package/dist/chunk-WCKSKU3C.js.map +0 -1
  110. package/dist/chunk-WU6FW77M.mjs +0 -105
  111. package/dist/chunk-WU6FW77M.mjs.map +0 -1
  112. package/dist/chunk-XE4OXN2W.js +0 -12
  113. package/dist/chunk-XE4OXN2W.js.map +0 -1
  114. package/dist/chunk-YBM3IJEA.mjs +0 -94
  115. package/dist/chunk-YBM3IJEA.mjs.map +0 -1
  116. package/dist/chunk-YN6WIWNQ.mjs +0 -228
  117. package/dist/chunk-YN6WIWNQ.mjs.map +0 -1
  118. package/dist/chunk-YSLEF5C5.mjs +0 -1
  119. package/dist/chunk-YSLEF5C5.mjs.map +0 -1
  120. package/dist/chunk-ZX7QIN24.mjs +0 -31
  121. package/dist/chunk-ZX7QIN24.mjs.map +0 -1
  122. package/dist/cli/index.d.mts +0 -23
  123. package/dist/cli/index.d.ts +0 -23
  124. package/dist/cli/index.js +0 -716
  125. package/dist/cli/index.js.map +0 -1
  126. package/dist/cli/index.mjs +0 -718
  127. package/dist/cli/index.mjs.map +0 -1
  128. package/dist/client/index.d.mts +0 -21
  129. package/dist/client/index.d.ts +0 -21
  130. package/dist/client/index.js +0 -13
  131. package/dist/client/index.js.map +0 -1
  132. package/dist/client/index.mjs +0 -13
  133. package/dist/client/index.mjs.map +0 -1
  134. package/dist/codegen/index.d.mts +0 -2
  135. package/dist/codegen/index.d.ts +0 -2
  136. package/dist/codegen/index.js +0 -16
  137. package/dist/codegen/index.js.map +0 -1
  138. package/dist/codegen/index.mjs +0 -16
  139. package/dist/codegen/index.mjs.map +0 -1
  140. package/dist/decorators-BT1FFqN0.d.mts +0 -29
  141. package/dist/decorators-DvS58PqC.d.ts +0 -29
  142. package/dist/dev-server/index.d.mts +0 -1
  143. package/dist/dev-server/index.d.ts +0 -1
  144. package/dist/dev-server/index.js +0 -13
  145. package/dist/dev-server/index.js.map +0 -1
  146. package/dist/dev-server/index.mjs +0 -13
  147. package/dist/dev-server/index.mjs.map +0 -1
  148. package/dist/index-7QeQEf37.d.ts +0 -92
  149. package/dist/index-7RvU-jGE.d.mts +0 -66
  150. package/dist/index-7RvU-jGE.d.ts +0 -66
  151. package/dist/index-8nzxy0NN.d.mts +0 -92
  152. package/dist/index-Co5ZsLqq.d.ts +0 -58
  153. package/dist/index-D94W1__r.d.mts +0 -58
  154. package/dist/index-DQmyVp6F.d.mts +0 -27
  155. package/dist/index-KL_1BrQb.d.ts +0 -27
  156. package/dist/index.d.mts +0 -294
  157. package/dist/index.d.ts +0 -294
  158. package/dist/index.js +0 -424
  159. package/dist/index.js.map +0 -1
  160. package/dist/index.mjs +0 -424
  161. package/dist/index.mjs.map +0 -1
  162. package/dist/nest/index.d.mts +0 -3
  163. package/dist/nest/index.d.ts +0 -3
  164. package/dist/nest/index.js +0 -38
  165. package/dist/nest/index.js.map +0 -1
  166. package/dist/nest/index.mjs +0 -38
  167. package/dist/nest/index.mjs.map +0 -1
  168. package/dist/next/index.d.mts +0 -66
  169. package/dist/next/index.d.ts +0 -66
  170. package/dist/next/index.js +0 -289
  171. package/dist/next/index.js.map +0 -1
  172. package/dist/next/index.mjs +0 -251
  173. package/dist/next/index.mjs.map +0 -1
  174. package/dist/rpc/index.d.mts +0 -2
  175. package/dist/rpc/index.d.ts +0 -2
  176. package/dist/rpc/index.js +0 -23
  177. package/dist/rpc/index.js.map +0 -1
  178. package/dist/rpc/index.mjs +0 -23
  179. package/dist/rpc/index.mjs.map +0 -1
  180. package/dist/runtime/index.d.mts +0 -55
  181. package/dist/runtime/index.d.ts +0 -55
  182. package/dist/runtime/index.js +0 -221
  183. package/dist/runtime/index.js.map +0 -1
  184. package/dist/runtime/index.mjs +0 -221
  185. package/dist/runtime/index.mjs.map +0 -1
  186. package/dist/types/index.d.mts +0 -12
  187. package/dist/types/index.d.ts +0 -12
  188. package/dist/types/index.js +0 -2
  189. package/dist/types/index.js.map +0 -1
  190. package/dist/types/index.mjs +0 -3
  191. package/dist/types/index.mjs.map +0 -1
  192. package/dist/types-7d_fC-C3.d.mts +0 -32
  193. package/dist/types-7d_fC-C3.d.ts +0 -32
  194. package/dist/vercel-builder/index.d.mts +0 -58
  195. package/dist/vercel-builder/index.d.ts +0 -58
  196. package/dist/vercel-builder/index.js +0 -330
  197. package/dist/vercel-builder/index.js.map +0 -1
  198. package/dist/vercel-builder/index.mjs +0 -330
  199. package/dist/vercel-builder/index.mjs.map +0 -1
@@ -1,32 +1,32 @@
1
- import { NestFactory } from '@nestjs/core';
2
- import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
3
- import { ValidationPipe } from '@nestjs/common';
4
- import { AppModule } from './app.module';
5
-
6
- async function bootstrap() {
7
- const app = await NestFactory.create<NestFastifyApplication>(
8
- AppModule,
9
- new FastifyAdapter({ logger: true })
10
- );
11
-
12
- // Enable CORS
13
- app.enableCors({
14
- origin: process.env.FRONTEND_URL || 'http://localhost:3000',
15
- credentials: true,
16
- });
17
-
18
- // Global validation pipe
19
- app.useGlobalPipes(
20
- new ValidationPipe({
21
- whitelist: true,
22
- transform: true,
23
- })
24
- );
25
-
26
- const port = process.env.PORT || 5050;
27
- await app.listen(port, '0.0.0.0');
28
-
29
- console.log(`🚀 wexts API running on http://localhost:${port}`);
30
- }
31
-
32
- bootstrap();
1
+ import { NestFactory } from '@nestjs/core';
2
+ import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
3
+ import { ValidationPipe } from '@nestjs/common';
4
+ import { AppModule } from './app.module';
5
+
6
+ async function bootstrap() {
7
+ const app = await NestFactory.create<NestFastifyApplication>(
8
+ AppModule,
9
+ new FastifyAdapter({ logger: true })
10
+ );
11
+
12
+ // Enable CORS
13
+ app.enableCors({
14
+ origin: process.env.FRONTEND_URL || 'http://localhost:3000',
15
+ credentials: true,
16
+ });
17
+
18
+ // Global validation pipe
19
+ app.useGlobalPipes(
20
+ new ValidationPipe({
21
+ whitelist: true,
22
+ transform: true,
23
+ })
24
+ );
25
+
26
+ const port = process.env.PORT || 5050;
27
+ await app.listen(port, '0.0.0.0');
28
+
29
+ console.log(`🚀 wexts API running on http://localhost:${port}`);
30
+ }
31
+
32
+ bootstrap();
@@ -1,9 +1,9 @@
1
- import { Module, Global } from '@nestjs/common';
2
- import { PrismaService } from './prisma.service';
3
-
4
- @Global()
5
- @Module({
6
- providers: [PrismaService],
7
- exports: [PrismaService],
8
- })
9
- export class PrismaModule { }
1
+ import { Module, Global } from '@nestjs/common';
2
+ import { PrismaService } from './prisma.service';
3
+
4
+ @Global()
5
+ @Module({
6
+ providers: [PrismaService],
7
+ exports: [PrismaService],
8
+ })
9
+ export class PrismaModule { }
@@ -1,14 +1,14 @@
1
- import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
- import { PrismaClient } from '@prisma/client';
3
-
4
- @Injectable()
5
- export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
6
- async onModuleInit() {
7
- await this.$connect();
8
- console.log('✅ Prisma connected');
9
- }
10
-
11
- async onModuleDestroy() {
12
- await this.$disconnect();
13
- }
14
- }
1
+ import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { PrismaClient } from '@prisma/client';
3
+
4
+ @Injectable()
5
+ export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
6
+ async onModuleInit() {
7
+ await this.$connect();
8
+ console.log('✅ Prisma connected');
9
+ }
10
+
11
+ async onModuleDestroy() {
12
+ await this.$disconnect();
13
+ }
14
+ }
@@ -1,24 +1,24 @@
1
- import { IsString, IsBoolean, IsOptional } from 'class-validator';
2
-
3
- export class CreateTodoDto {
4
- @IsString()
5
- title: string;
6
-
7
- @IsString()
8
- @IsOptional()
9
- description?: string;
10
- }
11
-
12
- export class UpdateTodoDto {
13
- @IsString()
14
- @IsOptional()
15
- title?: string;
16
-
17
- @IsString()
18
- @IsOptional()
19
- description?: string;
20
-
21
- @IsBoolean()
22
- @IsOptional()
23
- completed?: boolean;
24
- }
1
+ import { IsString, IsBoolean, IsOptional } from 'class-validator';
2
+
3
+ export class CreateTodoDto {
4
+ @IsString()
5
+ title: string;
6
+
7
+ @IsString()
8
+ @IsOptional()
9
+ description?: string;
10
+ }
11
+
12
+ export class UpdateTodoDto {
13
+ @IsString()
14
+ @IsOptional()
15
+ title?: string;
16
+
17
+ @IsString()
18
+ @IsOptional()
19
+ description?: string;
20
+
21
+ @IsBoolean()
22
+ @IsOptional()
23
+ completed?: boolean;
24
+ }
@@ -1,39 +1,39 @@
1
- import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Request } from '@nestjs/common';
2
- import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
- import { TodosService } from './todos.service';
4
- import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
5
-
6
- @Controller('todos')
7
- @UseGuards(JwtAuthGuard)
8
- export class TodosController {
9
- constructor(private todosService: TodosService) { }
10
-
11
- @Get()
12
- async findAll(@Request() req) {
13
- return this.todosService.findAll(req.user.userId);
14
- }
15
-
16
- @Get(':id')
17
- async findOne(@Param('id') id: string, @Request() req) {
18
- return this.todosService.findOne(id, req.user.userId);
19
- }
20
-
21
- @Post()
22
- async create(@Body() dto: CreateTodoDto, @Request() req) {
23
- return this.todosService.create(dto, req.user.userId);
24
- }
25
-
26
- @Put(':id')
27
- async update(
28
- @Param('id') id: string,
29
- @Body() dto: UpdateTodoDto,
30
- @Request() req,
31
- ) {
32
- return this.todosService.update(id, dto, req.user.userId);
33
- }
34
-
35
- @Delete(':id')
36
- async remove(@Param('id') id: string, @Request() req) {
37
- return this.todosService.remove(id, req.user.userId);
38
- }
39
- }
1
+ import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Request } from '@nestjs/common';
2
+ import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
+ import { TodosService } from './todos.service';
4
+ import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
5
+
6
+ @Controller('todos')
7
+ @UseGuards(JwtAuthGuard)
8
+ export class TodosController {
9
+ constructor(private todosService: TodosService) { }
10
+
11
+ @Get()
12
+ async findAll(@Request() req) {
13
+ return this.todosService.findAll(req.user.userId);
14
+ }
15
+
16
+ @Get(':id')
17
+ async findOne(@Param('id') id: string, @Request() req) {
18
+ return this.todosService.findOne(id, req.user.userId);
19
+ }
20
+
21
+ @Post()
22
+ async create(@Body() dto: CreateTodoDto, @Request() req) {
23
+ return this.todosService.create(dto, req.user.userId);
24
+ }
25
+
26
+ @Put(':id')
27
+ async update(
28
+ @Param('id') id: string,
29
+ @Body() dto: UpdateTodoDto,
30
+ @Request() req,
31
+ ) {
32
+ return this.todosService.update(id, dto, req.user.userId);
33
+ }
34
+
35
+ @Delete(':id')
36
+ async remove(@Param('id') id: string, @Request() req) {
37
+ return this.todosService.remove(id, req.user.userId);
38
+ }
39
+ }
@@ -1,11 +1,11 @@
1
- import { Module } from '@nestjs/common';
2
- import { TodosService } from './todos.service';
3
- import { TodosController } from './todos.controller';
4
- import { PrismaModule } from '../prisma/prisma.module';
5
-
6
- @Module({
7
- imports: [PrismaModule], // ✅ Import PrismaModule
8
- controllers: [TodosController],
9
- providers: [TodosService],
10
- })
11
- export class TodosModule { }
1
+ import { Module } from '@nestjs/common';
2
+ import { TodosService } from './todos.service';
3
+ import { TodosController } from './todos.controller';
4
+ import { PrismaModule } from '../prisma/prisma.module';
5
+
6
+ @Module({
7
+ imports: [PrismaModule], // ✅ Import PrismaModule
8
+ controllers: [TodosController],
9
+ providers: [TodosService],
10
+ })
11
+ export class TodosModule { }
@@ -1,53 +1,53 @@
1
- import { Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
2
- import { PrismaService } from '../prisma/prisma.service';
3
- import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
4
-
5
- @Injectable()
6
- export class TodosService {
7
- constructor(private prisma: PrismaService) { }
8
-
9
- async findAll(userId: string) {
10
- return this.prisma.todo.findMany({
11
- where: { userId },
12
- orderBy: { createdAt: 'desc' },
13
- });
14
- }
15
-
16
- async findOne(id: string, userId: string) {
17
- const todo = await this.prisma.todo.findUnique({ where: { id } });
18
-
19
- if (!todo) {
20
- throw new NotFoundException('Todo not found');
21
- }
22
-
23
- if (todo.userId !== userId) {
24
- throw new ForbiddenException('Access denied');
25
- }
26
-
27
- return todo;
28
- }
29
-
30
- async create(dto: CreateTodoDto, userId: string) {
31
- return this.prisma.todo.create({
32
- data: {
33
- ...dto,
34
- userId,
35
- },
36
- });
37
- }
38
-
39
- async update(id: string, dto: UpdateTodoDto, userId: string) {
40
- await this.findOne(id, userId); // Check ownership
41
-
42
- return this.prisma.todo.update({
43
- where: { id },
44
- data: dto,
45
- });
46
- }
47
-
48
- async remove(id: string, userId: string) {
49
- await this.findOne(id, userId); // Check ownership
50
-
51
- return this.prisma.todo.delete({ where: { id } });
52
- }
53
- }
1
+ import { Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
2
+ import { PrismaService } from '../prisma/prisma.service';
3
+ import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
4
+
5
+ @Injectable()
6
+ export class TodosService {
7
+ constructor(private prisma: PrismaService) { }
8
+
9
+ async findAll(userId: string) {
10
+ return this.prisma.todo.findMany({
11
+ where: { userId },
12
+ orderBy: { createdAt: 'desc' },
13
+ });
14
+ }
15
+
16
+ async findOne(id: string, userId: string) {
17
+ const todo = await this.prisma.todo.findUnique({ where: { id } });
18
+
19
+ if (!todo) {
20
+ throw new NotFoundException('Todo not found');
21
+ }
22
+
23
+ if (todo.userId !== userId) {
24
+ throw new ForbiddenException('Access denied');
25
+ }
26
+
27
+ return todo;
28
+ }
29
+
30
+ async create(dto: CreateTodoDto, userId: string) {
31
+ return this.prisma.todo.create({
32
+ data: {
33
+ ...dto,
34
+ userId,
35
+ },
36
+ });
37
+ }
38
+
39
+ async update(id: string, dto: UpdateTodoDto, userId: string) {
40
+ await this.findOne(id, userId); // Check ownership
41
+
42
+ return this.prisma.todo.update({
43
+ where: { id },
44
+ data: dto,
45
+ });
46
+ }
47
+
48
+ async remove(id: string, userId: string) {
49
+ await this.findOne(id, userId); // Check ownership
50
+
51
+ return this.prisma.todo.delete({ where: { id } });
52
+ }
53
+ }
@@ -1,14 +1,14 @@
1
- import { Controller, Get, UseGuards, Request } from '@nestjs/common';
2
- import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
- import { UsersService } from './users.service';
4
-
5
- @Controller('users')
6
- @UseGuards(JwtAuthGuard)
7
- export class UsersController {
8
- constructor(private usersService: UsersService) { }
9
-
10
- @Get('me')
11
- async getMe(@Request() req) {
12
- return this.usersService.findById(req.user.userId);
13
- }
14
- }
1
+ import { Controller, Get, UseGuards, Request } from '@nestjs/common';
2
+ import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
+ import { UsersService } from './users.service';
4
+
5
+ @Controller('users')
6
+ @UseGuards(JwtAuthGuard)
7
+ export class UsersController {
8
+ constructor(private usersService: UsersService) { }
9
+
10
+ @Get('me')
11
+ async getMe(@Request() req) {
12
+ return this.usersService.findById(req.user.userId);
13
+ }
14
+ }
@@ -1,12 +1,12 @@
1
- import { Module } from '@nestjs/common';
2
- import { UsersService } from './users.service';
3
- import { UsersController } from './users.controller';
4
- import { PrismaModule } from '../prisma/prisma.module';
5
-
6
- @Module({
7
- imports: [PrismaModule], // ✅ Import PrismaModule
8
- controllers: [UsersController],
9
- providers: [UsersService],
10
- exports: [UsersService],
11
- })
12
- export class UsersModule { }
1
+ import { Module } from '@nestjs/common';
2
+ import { UsersService } from './users.service';
3
+ import { UsersController } from './users.controller';
4
+ import { PrismaModule } from '../prisma/prisma.module';
5
+
6
+ @Module({
7
+ imports: [PrismaModule], // ✅ Import PrismaModule
8
+ controllers: [UsersController],
9
+ providers: [UsersService],
10
+ exports: [UsersService],
11
+ })
12
+ export class UsersModule { }
@@ -1,19 +1,19 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { PrismaService } from '../prisma/prisma.service';
3
-
4
- @Injectable()
5
- export class UsersService {
6
- constructor(private prisma: PrismaService) { }
7
-
8
- async findById(id: string) {
9
- return this.prisma.user.findUnique({
10
- where: { id },
11
- select: {
12
- id: true,
13
- email: true,
14
- name: true,
15
- createdAt: true,
16
- },
17
- });
18
- }
19
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { PrismaService } from '../prisma/prisma.service';
3
+
4
+ @Injectable()
5
+ export class UsersService {
6
+ constructor(private prisma: PrismaService) { }
7
+
8
+ async findById(id: string) {
9
+ return this.prisma.user.findUnique({
10
+ where: { id },
11
+ select: {
12
+ id: true,
13
+ email: true,
14
+ name: true,
15
+ createdAt: true,
16
+ },
17
+ });
18
+ }
19
+ }
@@ -1,40 +1,40 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "declaration": true,
5
- "removeComments": true,
6
- "emitDecoratorMetadata": true,
7
- "experimentalDecorators": true,
8
- "allowSyntheticDefaultImports": true,
9
- "target": "ES2021",
10
- "sourceMap": true,
11
- "outDir": "./dist",
12
- "baseUrl": "./",
13
- "incremental": true,
14
- "skipLibCheck": true,
15
- "strictNullChecks": false,
16
- "noImplicitAny": false,
17
- "strictBindCallApply": false,
18
- "forceConsistentCasingInFileNames": false,
19
- "noFallthroughCasesInSwitch": false,
20
- "moduleResolution": "node",
21
- "esModuleInterop": true,
22
- "paths": {
23
- "wexts/nest": [
24
- "node_modules/wexts/dist/nest/index"
25
- ],
26
- "wexts/next": [
27
- "node_modules/wexts/dist/next/index"
28
- ],
29
- "wexts/client": [
30
- "node_modules/wexts/dist/client/index"
31
- ],
32
- "wexts/types": [
33
- "node_modules/wexts/dist/types/index"
34
- ],
35
- "wexts": [
36
- "node_modules/wexts/dist/index"
37
- ]
38
- }
39
- }
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "declaration": true,
5
+ "removeComments": true,
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "target": "ES2021",
10
+ "sourceMap": true,
11
+ "outDir": "./dist",
12
+ "baseUrl": "./",
13
+ "incremental": true,
14
+ "skipLibCheck": true,
15
+ "strictNullChecks": false,
16
+ "noImplicitAny": false,
17
+ "strictBindCallApply": false,
18
+ "forceConsistentCasingInFileNames": false,
19
+ "noFallthroughCasesInSwitch": false,
20
+ "moduleResolution": "node",
21
+ "esModuleInterop": true,
22
+ "paths": {
23
+ "wexts/nest": [
24
+ "node_modules/wexts/dist/nest/index"
25
+ ],
26
+ "wexts/next": [
27
+ "node_modules/wexts/dist/next/index"
28
+ ],
29
+ "wexts/client": [
30
+ "node_modules/wexts/dist/client/index"
31
+ ],
32
+ "wexts/types": [
33
+ "node_modules/wexts/dist/types/index"
34
+ ],
35
+ "wexts": [
36
+ "node_modules/wexts/dist/index"
37
+ ]
38
+ }
39
+ }
40
40
  }