la otra mitad del commit anterior
This commit is contained in:
@@ -11,6 +11,16 @@ import { CreateTrainingDto } from './dto/create-training.dto';
|
|||||||
import { TrainingStatisticsFilterDto } from './dto/training-statistics-filter.dto';
|
import { TrainingStatisticsFilterDto } from './dto/training-statistics-filter.dto';
|
||||||
import { UpdateTrainingDto } from './dto/update-training.dto';
|
import { UpdateTrainingDto } from './dto/update-training.dto';
|
||||||
|
|
||||||
|
// TRUE: para mostrar los logs de errores en la api
|
||||||
|
// Actualmente estás solo en crear registro. Despues lo implemento en los demas
|
||||||
|
const debug = false;
|
||||||
|
|
||||||
|
type User = {
|
||||||
|
role: string;
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TrainingService {
|
export class TrainingService {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -18,7 +28,8 @@ export class TrainingService {
|
|||||||
private readonly minioService: MinioService,
|
private readonly minioService: MinioService,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
async findAll(paginationDto?: PaginationDto) {
|
|
||||||
|
async findAll(paginationDto?: PaginationDto, user?: User) {
|
||||||
const {
|
const {
|
||||||
page = 1,
|
page = 1,
|
||||||
limit = 10,
|
limit = 10,
|
||||||
@@ -34,6 +45,10 @@ export class TrainingService {
|
|||||||
searchCondition = or(ilike(trainingSurveys.ospName, `%${search}%`));
|
searchCondition = or(ilike(trainingSurveys.ospName, `%${search}%`));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user?.role == 'coordinators') {
|
||||||
|
searchCondition = eq(trainingSurveys.createdBy, user.id)
|
||||||
|
}
|
||||||
|
|
||||||
const orderBy =
|
const orderBy =
|
||||||
sortOrder === 'asc'
|
sortOrder === 'asc'
|
||||||
? sql`${trainingSurveys[sortBy as keyof typeof trainingSurveys]} asc`
|
? sql`${trainingSurveys[sortBy as keyof typeof trainingSurveys]} asc`
|
||||||
@@ -257,50 +272,57 @@ export class TrainingService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ========== Guardar registro ========== //
|
||||||
async create(
|
async create(
|
||||||
createTrainingDto: CreateTrainingDto,
|
createTrainingDto: CreateTrainingDto,
|
||||||
files: Express.Multer.File[],
|
files: Express.Multer.File[],
|
||||||
userId: number,
|
userId: number,
|
||||||
) {
|
) {
|
||||||
// 1. Guardar fotos
|
try {
|
||||||
|
// 1. Guardar fotos
|
||||||
|
const photoPaths = await this.saveFiles(files);
|
||||||
|
// const photoPaths = [];
|
||||||
|
|
||||||
const photoPaths = await this.saveFiles(files);
|
// 2. Extraer solo visitDate para formatearlo.
|
||||||
|
// Ya NO extraemos state, municipality, etc. porque no vienen en el DTO.
|
||||||
|
const { visitDate, state, municipality, parish, productiveActivityOther, ...rest } =
|
||||||
|
createTrainingDto;
|
||||||
|
|
||||||
// 2. Extraer solo visitDate para formatearlo.
|
const [newRecord] = await this.drizzle
|
||||||
// Ya NO extraemos state, municipality, etc. porque no vienen en el DTO.
|
.insert(trainingSurveys)
|
||||||
const { visitDate, state, municipality, parish, productiveActivityOther, ...rest } =
|
.values({
|
||||||
createTrainingDto;
|
// Insertamos el resto de datos planos y las listas (arrays)
|
||||||
|
...rest,
|
||||||
|
|
||||||
const [newRecord] = await this.drizzle
|
// Conversión de fecha
|
||||||
.insert(trainingSurveys)
|
visitDate: new Date(visitDate),
|
||||||
.values({
|
|
||||||
// Insertamos el resto de datos planos y las listas (arrays)
|
|
||||||
...rest,
|
|
||||||
|
|
||||||
// Conversión de fecha
|
// Borra las tildes y cambia el texto a mayusculas
|
||||||
visitDate: new Date(visitDate),
|
productiveActivityOther: productiveActivityOther ? productiveActivityOther.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "") : '',
|
||||||
|
|
||||||
// Borra las tildes y cambia el texto a mayusculas
|
// 3. Asignar fotos de forma segura
|
||||||
productiveActivityOther: productiveActivityOther.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""),
|
photo1: photoPaths[0] ?? null,
|
||||||
|
photo2: photoPaths[1] ?? null,
|
||||||
|
photo3: photoPaths[2] ?? null,
|
||||||
|
state: Number(state) ?? null,
|
||||||
|
municipality: Number(municipality) ?? null,
|
||||||
|
parish: Number(parish) ?? null,
|
||||||
|
hasTransport: rest.hasTransport === 'true' ? true : false,
|
||||||
|
isOpenSpace: rest.isOpenSpace === 'true' ? true : false,
|
||||||
|
isExporting: rest.isExporting === 'true' ? true : false,
|
||||||
|
createdBy: userId,
|
||||||
|
updatedBy: userId,
|
||||||
|
})
|
||||||
|
.returning();
|
||||||
|
|
||||||
// 3. Asignar fotos de forma segura
|
return newRecord;
|
||||||
photo1: photoPaths[0] ?? null,
|
} catch (e) {
|
||||||
photo2: photoPaths[1] ?? null,
|
if (debug) console.log(e);
|
||||||
photo3: photoPaths[2] ?? null,
|
return null // null para que de error
|
||||||
state: Number(state) ?? null,
|
}
|
||||||
municipality: Number(municipality) ?? null,
|
|
||||||
parish: Number(parish) ?? null,
|
|
||||||
hasTransport: rest.hasTransport === 'true' ? true : false,
|
|
||||||
isOpenSpace: rest.isOpenSpace === 'true' ? true : false,
|
|
||||||
isExporting: rest.isExporting === 'true' ? true : false,
|
|
||||||
createdBy: userId,
|
|
||||||
updatedBy: userId,
|
|
||||||
})
|
|
||||||
.returning();
|
|
||||||
|
|
||||||
return newRecord;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ========== Actualizar registro ========== //
|
||||||
async update(
|
async update(
|
||||||
id: number,
|
id: number,
|
||||||
updateTrainingDto: UpdateTrainingDto,
|
updateTrainingDto: UpdateTrainingDto,
|
||||||
@@ -376,6 +398,7 @@ export class TrainingService {
|
|||||||
return updatedRecord;
|
return updatedRecord;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ========== Eliminar registro ========== //
|
||||||
async remove(id: number) {
|
async remove(id: number) {
|
||||||
const record = await this.findOne(id);
|
const record = await this.findOne(id);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user