refactor: compute favorite links in backend

This commit is contained in:
Sonny
2025-08-19 23:44:48 +02:00
parent 81d02d3d80
commit 1d1e182523
2 changed files with 20 additions and 5 deletions

View File

@@ -1,17 +1,24 @@
import { CollectionService } from '#collections/services/collection_service';
import { LinkService } from '#links/services/link_service';
import { inject } from '@adonisjs/core';
import type { HttpContext } from '@adonisjs/core/http';
@inject()
export default class ShowCollectionsController {
constructor(private collectionService: CollectionService) {}
constructor(
private collectionService: CollectionService,
private linkService: LinkService
) {}
// Dashboard
async render({ inertia, response }: HttpContext) {
const activeCollectionId =
await this.collectionService.validateCollectionId(false);
const collections =
await this.collectionService.getCollectionsForAuthenticatedUser();
const [collections, favoriteLinks] = await Promise.all([
this.collectionService.getCollectionsForAuthenticatedUser(),
this.linkService.getFavoriteLinksForAuthenticatedUser(),
]);
if (collections.length === 0) {
return response.redirectToNamedRoute('collection.create-form');
}
@@ -26,8 +33,8 @@ export default class ShowCollectionsController {
return inertia.render('dashboard', {
collections: collections.map((collection) => collection.serialize()),
activeCollection:
activeCollection?.serialize() || collections[0].serialize(),
favoriteLinks: favoriteLinks.map((link) => link.serialize()),
activeCollection: activeCollection?.serialize(),
});
}
}

View File

@@ -50,6 +50,14 @@ export class LinkService {
.update({ favorite });
}
async getFavoriteLinksForAuthenticatedUser() {
const context = this.getAuthContext();
return await Link.query()
.where('author_id', context.auth.user!.id)
.where('favorite', true)
.orderBy('created_at');
}
getAuthContext() {
const context = HttpContext.getOrFail();
if (!context.auth.user || !context.auth.user.id) {