diff --git a/api/src/auth/auth.service.ts b/api/src/auth/auth.service.ts index c6e4b27..612dfac 100644 --- a/api/src/auth/auth.service.ts +++ b/api/src/auth/auth.service.ts @@ -196,4 +196,18 @@ export class AuthService { await this.apiKeyModel.deleteOne({ _id: apiKeyId }) } + + async trackApiKeyUsage(apiKeyId: string) { + this.apiKeyModel + .findByIdAndUpdate( + apiKeyId, + { $inc: { usageCount: 1 }, lastUsedAt: new Date() }, + { new: true }, + ) + .exec() + .catch((e) => { + console.log('Failed to track api key usage') + console.log(e) + }) + } } diff --git a/api/src/auth/guards/auth.guard.ts b/api/src/auth/guards/auth.guard.ts index 4ab5a34..8bfc9c2 100644 --- a/api/src/auth/guards/auth.guard.ts +++ b/api/src/auth/guards/auth.guard.ts @@ -46,6 +46,9 @@ export class AuthGuard implements CanActivate { const user = await this.usersService.findOne({ _id: userId }) if (user) { request.user = user + if (request.query.apiKey) { + this.authService.trackApiKeyUsage(user._id) + } return true } } diff --git a/api/src/auth/schemas/api-key.schema.ts b/api/src/auth/schemas/api-key.schema.ts index 7a1d54a..426aed0 100644 --- a/api/src/auth/schemas/api-key.schema.ts +++ b/api/src/auth/schemas/api-key.schema.ts @@ -16,6 +16,12 @@ export class ApiKey { @Prop({ type: Types.ObjectId, ref: User.name }) user: User + + @Prop({ type: Number, default: 0 }) + usageCount: number + + @Prop({ type: Date }) + lastUsedAt: Date } export const ApiKeySchema = SchemaFactory.createForClass(ApiKey)