#23: users table + insert/update added
This commit is contained in:
@@ -3,10 +3,11 @@ import { DecksController } from './decks.controller';
|
||||
import { DrizzleService } from './drizzle.service';
|
||||
import { ProxyController } from './proxy.controller';
|
||||
import { SqlLoggerService } from './sql-logger.service';
|
||||
import { UserController } from './user.controller';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
controllers: [DecksController, ProxyController],
|
||||
controllers: [DecksController, ProxyController, UserController],
|
||||
providers: [DrizzleService, SqlLoggerService],
|
||||
})
|
||||
export class AppModule {}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||
import { and, eq, sql } from 'drizzle-orm';
|
||||
//import { drizzle } from 'drizzle-orm/libsql';
|
||||
import { drizzle } from 'drizzle-orm/node-postgres';
|
||||
import { deck, SelectDeck, User } from '../db/schema';
|
||||
import { deck, InsertUser, SelectDeck, User, users } from '../db/schema';
|
||||
import { SqlLoggerService } from './sql-logger.service';
|
||||
|
||||
@Injectable()
|
||||
@@ -11,16 +11,7 @@ export class DrizzleService {
|
||||
// private readonly logger = new Logger(DrizzleService.name);
|
||||
private db: any;
|
||||
constructor(private sqlLogger: SqlLoggerService) {
|
||||
// this.db = drizzle('file:local.db', {
|
||||
// logger: {
|
||||
// logQuery: (query: string, params: any[]) => {
|
||||
// this.sqlLogger.logQuery(query, params);
|
||||
// },
|
||||
// },
|
||||
// });
|
||||
|
||||
this.db = drizzle(process.env['DATABASE_URL']!, {
|
||||
//this.db = drizzle('postgresql://haiky:xieng7Seih@localhost:15432/haiky', {
|
||||
logger: {
|
||||
logQuery: (query: string, params: any[]) => {
|
||||
this.sqlLogger.logQuery(query, params);
|
||||
@@ -296,4 +287,42 @@ export class DrizzleService {
|
||||
throw new HttpException(`Fehler beim Abrufen der Bild-IDs - ${error}`, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Führt den Login-Vorgang durch:
|
||||
* - Existiert der Benutzer bereits (überprüft via E-Mail), wird das Feld `lastLogin` (und ggf. weitere Felder) aktualisiert.
|
||||
* - Existiert der Benutzer nicht, wird ein neuer Datensatz mit `role: 'guest'` und `lastLogin` auf den aktuellen Zeitpunkt angelegt.
|
||||
*/
|
||||
async logIn(createUserDto: InsertUser) {
|
||||
// Prüfen, ob der Benutzer bereits existiert (hier anhand der E-Mail)
|
||||
const existingUser = await this.db.select().from(users).where(eq(users.email, createUserDto.email)).limit(1);
|
||||
|
||||
if (existingUser.length > 0) {
|
||||
// Benutzer existiert: Update des letzten Logins und ggf. weiterer Felder
|
||||
const updatedUser = await this.db
|
||||
.update(users)
|
||||
.set({
|
||||
lastLogin: new Date(), // Setzt lastLogin explizit auf den aktuellen Zeitpunkt
|
||||
// Optional: Aktualisierung von Name und sign_in_provider, falls sich diese ändern sollten
|
||||
name: createUserDto.name,
|
||||
sign_in_provider: createUserDto.sign_in_provider,
|
||||
})
|
||||
.where(eq(users.email, createUserDto.email))
|
||||
.returning();
|
||||
return updatedUser;
|
||||
} else {
|
||||
// Neuer Benutzer: Insert mit role per Default 'guest' und lastLogin auf now
|
||||
const insertedUser = await this.db
|
||||
.insert(users)
|
||||
.values({
|
||||
name: createUserDto.name,
|
||||
email: createUserDto.email,
|
||||
sign_in_provider: createUserDto.sign_in_provider,
|
||||
lastLogin: new Date(), // Setzt lastLogin auf now
|
||||
role: 'guest', // Default-Wert 'guest'
|
||||
})
|
||||
.returning();
|
||||
return insertedUser;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
15
api/src/app/user.controller.ts
Normal file
15
api/src/app/user.controller.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
// user.controller.ts
|
||||
import { Body, Controller, Post } from '@nestjs/common';
|
||||
import type { InsertUser } from '../db/schema';
|
||||
import { DrizzleService } from './drizzle.service';
|
||||
|
||||
@Controller('users')
|
||||
export class UserController {
|
||||
constructor(private readonly drizzleService: DrizzleService) {}
|
||||
|
||||
@Post()
|
||||
async createUser(@Body() createUserDto: InsertUser) {
|
||||
// Hier kannst du zusätzliche Validierungen oder Logik einbauen.
|
||||
return await this.drizzleService.logIn(createUserDto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user