aboutsummaryrefslogtreecommitdiffstats
path: root/src/session/service/session.service.ts
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2024-03-15 20:23:41 +0000
committerLeonardo Bishop <me@leonardobishop.com>2024-03-15 20:23:41 +0000
commitaeb8b66375335e8c9d6cb9cb0d8d7da3d8b79628 (patch)
tree0ddaa24fc536ac03493d6357e481df31dad77b16 /src/session/service/session.service.ts
Initial commit
Diffstat (limited to 'src/session/service/session.service.ts')
-rw-r--r--src/session/service/session.service.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/session/service/session.service.ts b/src/session/service/session.service.ts
new file mode 100644
index 0000000..0712fb0
--- /dev/null
+++ b/src/session/service/session.service.ts
@@ -0,0 +1,70 @@
+import { Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { Session } from '../entity/session.entity';
+import { Repository } from 'typeorm';
+
+@Injectable()
+export class SessionService {
+ constructor(
+ @InjectRepository(Session)
+ private sessionRepository: Repository<Session>,
+ ) {}
+
+ async findOne(key: string): Promise<Session | null> {
+ return await this.sessionRepository.findOneBy({ token: key });
+ }
+
+ async findValid(token: string): Promise<Session | null> {
+ return await this.sessionRepository
+ .createQueryBuilder('session')
+ .where('session.validUntil > :date', {
+ date: new Date(Date.now()),
+ })
+ .andWhere({
+ token: token,
+ used: false,
+ })
+ .getOne();
+ }
+
+ async createSession(validTo: Date): Promise<Session | null> {
+ const session = new Session();
+ session.validUntil = validTo;
+
+ await this.sessionRepository.save(session);
+ return session;
+ }
+
+ async isValidSession(token: string) {
+ return (
+ (await this.sessionRepository
+ .createQueryBuilder('session')
+ .where('session.validUntil > :date', {
+ date: new Date(Date.now()),
+ })
+ .andWhere({
+ token: token,
+ used: false,
+ })
+ .getCount()) > 0
+ );
+ }
+
+ async markSessionAsUsed(token: string): Promise<boolean> {
+ const update = await this.sessionRepository
+ .createQueryBuilder()
+ .update({
+ used: true,
+ })
+ .where('validUntil > :date', {
+ date: new Date(Date.now()),
+ })
+ .andWhere({
+ token: token,
+ used: false,
+ })
+ .execute();
+
+ return update.affected > 0;
+ }
+}