system-praktyk-front/src/api/dto/edition.ts
2020-11-06 20:03:14 +01:00

58 lines
2.0 KiB
TypeScript

import { Identifiable } from "@/data";
import { CourseDTO, courseDtoTransformer } from "@/api/dto/course";
import { OneWayTransformer, Transformer } from "@/serialization";
import { Edition } from "@/data/edition";
import moment from "moment";
import { Subset } from "@/helpers";
export interface EditionDTO extends Identifiable {
editionStart: string,
editionFinish: string,
reportingStart: string,
course: CourseDTO,
}
export interface EditionTeaserDTO extends Identifiable {
editionStart: string,
editionFinish: string,
courseName: string,
}
export const editionTeaserDtoTransformer: OneWayTransformer<EditionTeaserDTO, Subset<Edition>> = {
transform(subject: EditionTeaserDTO, context?: undefined): Subset<Edition> {
return subject && {
id: subject.id,
startDate: moment(subject.editionStart),
endDate: moment(subject.editionFinish),
course: {
name: subject.courseName,
}
}
}
}
export const editionDtoTransformer: Transformer<EditionDTO, Edition> = {
reverseTransform(subject: Edition, context: undefined): EditionDTO {
return {
id: subject.id,
editionFinish: subject.endDate.toISOString(),
editionStart: subject.startDate.toISOString(),
course: courseDtoTransformer.reverseTransform(subject.course),
reportingStart: subject.reportingStart.toISOString(),
};
},
transform(subject: EditionDTO, context: undefined): Edition {
return {
id: subject.id,
course: courseDtoTransformer.transform(subject.course),
startDate: moment(subject.editionStart),
endDate: moment(subject.editionFinish),
minimumInternshipHours: 40,
maximumInternshipHours: 160,
proposalDeadline: moment(subject.reportingStart),
reportingStart: moment(subject.reportingStart),
reportingEnd: moment(subject.reportingStart).add(1, 'month'),
};
}
}