Merge branch 'CreateAnonymousDonation-dedicated-enitity-controller' into dev
This commit is contained in:
commit
7ffb7523aa
@ -4,6 +4,7 @@ import { Repository, getConnectionManager } from 'typeorm';
|
|||||||
import { DonationIdsNotMatchingError, DonationNotFoundError } from '../errors/DonationErrors';
|
import { DonationIdsNotMatchingError, DonationNotFoundError } from '../errors/DonationErrors';
|
||||||
import { DonorNotFoundError } from '../errors/DonorErrors';
|
import { DonorNotFoundError } from '../errors/DonorErrors';
|
||||||
import { RunnerNotFoundError } from '../errors/RunnerErrors';
|
import { RunnerNotFoundError } from '../errors/RunnerErrors';
|
||||||
|
import { CreateAnonymousDonation } from '../models/actions/create/CreateAnonymousDonation';
|
||||||
import { CreateDistanceDonation } from '../models/actions/create/CreateDistanceDonation';
|
import { CreateDistanceDonation } from '../models/actions/create/CreateDistanceDonation';
|
||||||
import { CreateFixedDonation } from '../models/actions/create/CreateFixedDonation';
|
import { CreateFixedDonation } from '../models/actions/create/CreateFixedDonation';
|
||||||
import { UpdateDistanceDonation } from '../models/actions/update/UpdateDistanceDonation';
|
import { UpdateDistanceDonation } from '../models/actions/update/UpdateDistanceDonation';
|
||||||
@ -11,6 +12,7 @@ import { UpdateFixedDonation } from '../models/actions/update/UpdateFixedDonatio
|
|||||||
import { DistanceDonation } from '../models/entities/DistanceDonation';
|
import { DistanceDonation } from '../models/entities/DistanceDonation';
|
||||||
import { Donation } from '../models/entities/Donation';
|
import { Donation } from '../models/entities/Donation';
|
||||||
import { FixedDonation } from '../models/entities/FixedDonation';
|
import { FixedDonation } from '../models/entities/FixedDonation';
|
||||||
|
import { ResponseAnonymousDonation } from '../models/responses/ResponseAnonymousDonation';
|
||||||
import { ResponseDistanceDonation } from '../models/responses/ResponseDistanceDonation';
|
import { ResponseDistanceDonation } from '../models/responses/ResponseDistanceDonation';
|
||||||
import { ResponseDonation } from '../models/responses/ResponseDonation';
|
import { ResponseDonation } from '../models/responses/ResponseDonation';
|
||||||
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
|
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
|
||||||
@ -35,6 +37,7 @@ export class DonationController {
|
|||||||
@Authorized("DONATION:GET")
|
@Authorized("DONATION:GET")
|
||||||
@ResponseSchema(ResponseDonation, { isArray: true })
|
@ResponseSchema(ResponseDonation, { isArray: true })
|
||||||
@ResponseSchema(ResponseDistanceDonation, { isArray: true })
|
@ResponseSchema(ResponseDistanceDonation, { isArray: true })
|
||||||
|
@ResponseSchema(ResponseAnonymousDonation, { isArray: true })
|
||||||
@OpenAPI({ description: 'Lists all donations (fixed or distance based) from all donors. <br> This includes the donations\'s runner\'s distance ran(if distance donation).' })
|
@OpenAPI({ description: 'Lists all donations (fixed or distance based) from all donors. <br> This includes the donations\'s runner\'s distance ran(if distance donation).' })
|
||||||
async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) {
|
async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) {
|
||||||
let responseDonations: ResponseDonation[] = new Array<ResponseDonation>();
|
let responseDonations: ResponseDonation[] = new Array<ResponseDonation>();
|
||||||
@ -56,6 +59,7 @@ export class DonationController {
|
|||||||
@Authorized("DONATION:GET")
|
@Authorized("DONATION:GET")
|
||||||
@ResponseSchema(ResponseDonation)
|
@ResponseSchema(ResponseDonation)
|
||||||
@ResponseSchema(ResponseDistanceDonation)
|
@ResponseSchema(ResponseDistanceDonation)
|
||||||
|
@ResponseSchema(ResponseAnonymousDonation)
|
||||||
@ResponseSchema(DonationNotFoundError, { statusCode: 404 })
|
@ResponseSchema(DonationNotFoundError, { statusCode: 404 })
|
||||||
@OnUndefined(DonationNotFoundError)
|
@OnUndefined(DonationNotFoundError)
|
||||||
@OpenAPI({ description: 'Lists all information about the donation whose id got provided. This includes the donation\'s runner\'s distance ran (if distance donation).' })
|
@OpenAPI({ description: 'Lists all information about the donation whose id got provided. This includes the donation\'s runner\'s distance ran (if distance donation).' })
|
||||||
@ -76,6 +80,17 @@ export class DonationController {
|
|||||||
return (await this.donationRepository.findOne({ id: donation.id }, { relations: ['donor'] })).toResponse();
|
return (await this.donationRepository.findOne({ id: donation.id }, { relations: ['donor'] })).toResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Post('/anonymous')
|
||||||
|
@Authorized("DONATION:CREATE")
|
||||||
|
@ResponseSchema(ResponseDonation)
|
||||||
|
@ResponseSchema(DonorNotFoundError, { statusCode: 404 })
|
||||||
|
@OpenAPI({ description: 'Create a anonymous donation' })
|
||||||
|
async postAnonymous(@Body({ validate: true }) createDonation: CreateAnonymousDonation) {
|
||||||
|
let donation = await createDonation.toEntity();
|
||||||
|
donation = await this.fixedDonationRepository.save(donation);
|
||||||
|
return (await this.donationRepository.findOne({ id: donation.id })).toResponse();
|
||||||
|
}
|
||||||
|
|
||||||
@Post('/distance')
|
@Post('/distance')
|
||||||
@Authorized("DONATION:CREATE")
|
@Authorized("DONATION:CREATE")
|
||||||
@ResponseSchema(ResponseDistanceDonation)
|
@ResponseSchema(ResponseDistanceDonation)
|
||||||
|
29
src/models/actions/create/CreateAnonymousDonation.ts
Normal file
29
src/models/actions/create/CreateAnonymousDonation.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import { IsInt, IsPositive } from 'class-validator';
|
||||||
|
import { FixedDonation } from '../../entities/FixedDonation';
|
||||||
|
import { CreateDonation } from './CreateDonation';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to create a new FixedDonation entity from a json body (post request).
|
||||||
|
*/
|
||||||
|
export class CreateAnonymousDonation extends CreateDonation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's amount.
|
||||||
|
* The unit is your currency's smallest unit (default: euro cent).
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
@IsPositive()
|
||||||
|
amount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new FixedDonation entity from this.
|
||||||
|
*/
|
||||||
|
public async toEntity(): Promise<FixedDonation> {
|
||||||
|
let newDonation = new FixedDonation;
|
||||||
|
|
||||||
|
newDonation.amount = this.amount;
|
||||||
|
newDonation.paidAmount = this.amount;
|
||||||
|
|
||||||
|
return newDonation;
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,20 @@ import { CreateDonation } from './CreateDonation';
|
|||||||
*/
|
*/
|
||||||
export class CreateDistanceDonation extends CreateDonation {
|
export class CreateDistanceDonation extends CreateDonation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's associated donor's id.
|
||||||
|
* This is important to link donations to donors.
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
@IsPositive()
|
||||||
|
donor: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's paid amount in the smalles unit of your currency (default: euro cent).
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
paidAmount?: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The donation's associated runner's id.
|
* The donation's associated runner's id.
|
||||||
* This is important to link the runner's distance ran to the donation.
|
* This is important to link the runner's distance ran to the donation.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { IsInt, IsOptional, IsPositive } from 'class-validator';
|
import { Exclude } from 'class-transformer';
|
||||||
import { getConnection } from 'typeorm';
|
import { getConnection } from 'typeorm';
|
||||||
import { Donation } from '../../entities/Donation';
|
import { Donation } from '../../entities/Donation';
|
||||||
import { Donor } from '../../entities/Donor';
|
import { Donor } from '../../entities/Donor';
|
||||||
@ -7,20 +7,10 @@ import { Donor } from '../../entities/Donor';
|
|||||||
* This class is used to create a new Donation entity from a json body (post request).
|
* This class is used to create a new Donation entity from a json body (post request).
|
||||||
*/
|
*/
|
||||||
export abstract class CreateDonation {
|
export abstract class CreateDonation {
|
||||||
/**
|
@Exclude()
|
||||||
* The donation's associated donor's id.
|
|
||||||
* This is important to link donations to donors.
|
|
||||||
*/
|
|
||||||
@IsInt()
|
|
||||||
@IsPositive()
|
|
||||||
@IsOptional()
|
|
||||||
donor: number;
|
donor: number;
|
||||||
|
|
||||||
/**
|
@Exclude()
|
||||||
* The donation's paid amount in the smalles unit of your currency (default: euro cent).
|
|
||||||
*/
|
|
||||||
@IsInt()
|
|
||||||
@IsOptional()
|
|
||||||
paidAmount?: number;
|
paidAmount?: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,6 +6,21 @@ import { CreateDonation } from './CreateDonation';
|
|||||||
* This class is used to create a new FixedDonation entity from a json body (post request).
|
* This class is used to create a new FixedDonation entity from a json body (post request).
|
||||||
*/
|
*/
|
||||||
export class CreateFixedDonation extends CreateDonation {
|
export class CreateFixedDonation extends CreateDonation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's associated donor's id.
|
||||||
|
* This is important to link donations to donors.
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
@IsPositive()
|
||||||
|
donor: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's paid amount in the smalles unit of your currency (default: euro cent).
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
paidAmount?: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The donation's amount.
|
* The donation's amount.
|
||||||
* The unit is your currency's smallest unit (default: euro cent).
|
* The unit is your currency's smallest unit (default: euro cent).
|
||||||
|
58
src/models/responses/ResponseAnonymousDonation.ts
Normal file
58
src/models/responses/ResponseAnonymousDonation.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import { IsInt, IsPositive } from "class-validator";
|
||||||
|
import { Donation } from '../entities/Donation';
|
||||||
|
import { DonationStatus } from '../enums/DonationStatus';
|
||||||
|
import { ResponseObjectType } from '../enums/ResponseObjectType';
|
||||||
|
import { IResponse } from './IResponse';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the donation response.
|
||||||
|
*/
|
||||||
|
export class ResponseAnonymousDonation implements IResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The responseType.
|
||||||
|
* This contains the type of class/entity this response contains.
|
||||||
|
*/
|
||||||
|
responseType: ResponseObjectType = ResponseObjectType.DONATION;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's payment status.
|
||||||
|
* Provides you with a quick indicator of it's payment status.
|
||||||
|
*/
|
||||||
|
status: DonationStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's id.
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
@IsPositive()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's amount in the smalles unit of your currency (default: euro cent).
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
amount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The donation's paid amount in the smalles unit of your currency (default: euro cent).
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
paidAmount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a ResponseDonation object from a scan.
|
||||||
|
* @param donation The donation the response shall be build for.
|
||||||
|
*/
|
||||||
|
public constructor(donation: Donation) {
|
||||||
|
this.id = donation.id;
|
||||||
|
this.amount = donation.amount;
|
||||||
|
this.paidAmount = donation.paidAmount || 0;
|
||||||
|
if (this.paidAmount < this.amount) {
|
||||||
|
this.status = DonationStatus.OPEN;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.status = DonationStatus.PAID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user