Skip to content
Snippets Groups Projects
Commit 870c689a authored by jsk22's avatar jsk22
Browse files

Issue #65-FIX_collection-routes

parent e75b10d0
No related branches found
No related tags found
1 merge request!60Issue #65-FIX_collection-routes
......@@ -7,15 +7,15 @@ MAILER_PORT=25
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=hono_db
DB_PORT=5432
DB_PORT=5433
DB_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
URL=https://mecred.c3sl.ufpr.br/
# secret
APP_SECRET=0crebI8PUWwj9E+GRzIGpBt64MwY9ufkBzBkYSH2v+Y=
APP_SECRET=
#s3
AWS_ACCESS_KEY_ID=ACCESS_KEY
AWS_SECRET_ACCESS_KEY=SECRET_KEY
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=default
S3_BUCKET=BUCKET_NAME
S3_BUCKET=mecredteste
......@@ -7,7 +7,7 @@ services:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
- "5433:5432"
networks:
- apex_network
volumes:
......
{
"id": "0ad63f02-9e60-4b45-85a0-3b8096d0223d",
"id": "9c23b9d5-4c93-4758-bd46-cd0e95cfd455",
"prevId": "00000000-0000-0000-0000-000000000000",
"version": "7",
"dialect": "postgresql",
......
......@@ -5,8 +5,8 @@
{
"idx": 0,
"version": "7",
"when": 1743429134832,
"tag": "0000_square_wolfpack",
"when": 1743432081845,
"tag": "0000_nappy_wolfpack",
"breakpoints": true
}
]
......
......@@ -7,11 +7,12 @@ import type {
import db from "..";
import collectionTable, { collectionSchemas } from "../schema/collections.schema";
import { and, eq, isNull } from 'drizzle-orm'
import type { ResourceModel } from "../schema/resource.schema";
import resourceTable, { resourceSchema, type ResourceModel } from "../schema/resource.schema";
import fs from 'fs';
import path from 'path';
import archiver from 'archiver';
import { PassThrough } from "stream";
import { collectionResourcesTable } from "../schema";
@Service()
......@@ -121,10 +122,17 @@ export class CollectionRepo {
)
}
// async downloadCollection(collectionId: CollectionModel['id']): Promise <Buffer> {
// try {
async getCollectionResources(id: CollectionModel['id']): Promise<ResourceModel[]> {
return await db
.select()
.from(resourceTable)
.innerJoin(
collectionResourcesTable,
eq(resourceTable.id, collectionResourcesTable.resource_id)
)
.where(eq(collectionResourcesTable.collection_id, id))
.then((rows) => rows.map((row) => row.resources)); // Ajusta a estrutura do retorno
}
// fazer zip
// }
// }
}
\ No newline at end of file
......@@ -4,7 +4,6 @@ import db from '..'
import resourceTable from "../schema/resource.schema";
import { eq, sql, and } from 'drizzle-orm'
@Service()
export class ResourceRepo {
async create(resource: ResourceInput
......@@ -103,5 +102,6 @@ export class ResourceRepo {
return resourceSchema.model.array().parse(await db.query.resourceTable.findMany({ where: eq(resourceTable.state, "accepted") }))
}
}
\ No newline at end of file
......@@ -120,4 +120,26 @@ export class userCollectionsRepo {
throw error;
}
}
async getOwnerCollection(collectionId: CollectionModel['id']): Promise<UserModel | null> {
try {
const owner = await db
.select({
id: userTable.id,
name: userTable.name,
email: userTable.email,
description: userTable.description,
})
.from(collectionTable)
.innerJoin(userTable, eq(collectionTable.user_id, userTable.id))
.where(eq(collectionTable.id, collectionId))
return owner;
} catch (error) {
console.error("Erro ao buscar o dono da coleção:", error);
throw new Error("Erro ao obter o dono da coleção");
}
}
}
\ No newline at end of file
......@@ -10,11 +10,14 @@ import { CollectionStatsService } from "@/services/collection-stats.service";
import { getFile } from "@/services/s3.service";
import archiver from "archiver"; // Biblioteca para criar ZIPs
import { CollectionResourcesService } from "@/services/collection-resources.service";
import { ResourceService } from "@/services/resource.service";
import { addObjectTypeNameArray } from "./resource.route";
const service = Container.get(CollectionsService);
const serviceStats = Container.get(CollectionStatsService);
const serviceResourceCollection = Container.get(CollectionResourcesService) ;
const resourceService = Container.get(ResourceService)
export const collectionsRouter = honoWithJwt()
.post(
......@@ -372,4 +375,26 @@ export const getCollections = new Hono()
500
);
}
});
\ No newline at end of file
})
.get("/:id/resources",
async(c) => {
try {
const id = +c.req.param('id')
const resources = await service.getCollectionResources(id)
const processedResources = await addObjectTypeNameArray(resources)
return c.json({ resources: processedResources });
} catch (e) {
return c.json(
createApexError({
status: 'error',
message: 'could not find collection',
code: HttpStatus.BAD_REQUEST,
path: c.req.routePath,
suggestion: 'check the input and try again',
}),
HttpStatus.NOT_FOUND
)
}
}
)
\ No newline at end of file
......@@ -26,7 +26,7 @@ type ResourceWithObjectTypeName = ResourceModel & {
};
//funcao para adicionar o nome do objectType a um array de recursos
async function addObjectTypeNameArray(resources: ResourceModel[]): Promise<ResourceWithObjectTypeName[]> {
export async function addObjectTypeNameArray(resources: ResourceModel[]): Promise<ResourceWithObjectTypeName[]> {
return Promise.all(resources.map(async (resource) => {
// Buscar o nome do objectType relacionado ao recurso
const objectType = await objectTypeService.findById(resource.object_type_id);
......@@ -375,4 +375,4 @@ export const publicResourceRouter = new Hono()
500
);
}
});
});
\ No newline at end of file
......@@ -98,7 +98,7 @@ export const publicUserCollectionsRoutes = new Hono()
}
}
)
.get('/collection/:collectionId/users',
.get(':collectionId/users',
async (c) => {
try {
const collectionId = +c.req.param('collectionId');
......@@ -118,3 +118,23 @@ export const publicUserCollectionsRoutes = new Hono()
}
}
)
.get('/:id/owner',
async (c) => {
try {
const id = +c.req.param('id');
const owner = await service.getOwnerCollection(id);
return c.json(owner, HttpStatus.OK);
} catch (e) {
return c.json(
createApexError({
status: 'error',
message: 'Failed to fetch owner',
code: HttpStatus.BAD_REQUEST,
path: c.req.routePath,
suggestion: 'Check the input and try again',
}),
HttpStatus.BAD_REQUEST
)
}
}
)
\ No newline at end of file
......@@ -5,6 +5,7 @@ import type {
CollectionModel,
CollectionUpdate
} from '@/db/schema/collections.schema'
import type { ResourceModel } from '@/db/schema/resource.schema'
@Service()
export class CollectionsService {
......@@ -57,4 +58,8 @@ export class CollectionsService {
return this.repo.getPrivateCollectionsByUser(id)
}
async getCollectionResources (id: CollectionModel['id']): Promise <ResourceModel[]> {
return this.repo.getCollectionResources(id)
}
}
\ No newline at end of file
......@@ -27,4 +27,8 @@ export class UserCollectionsService {
async getUsersByCollection(collectionId: CollectionModel['id']): Promise<UserModel[]> {
return this.repo.getUsersByCollection(collectionId);
}
async getOwnerCollection(collectionId: CollectionModel['id']): Promise<UserModel> {
return this.repo.getOwnerCollection(collectionId)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment