| @@ -1,6 +1,6 @@ | ||||
| import { IsNotEmpty, IsOptional, IsPostalCode, IsString } from 'class-validator'; | ||||
| import { config } from '../../config'; | ||||
| import { Address } from '../entities/Address'; | ||||
| import { config } from '../../../config'; | ||||
| import { Address } from '../../entities/Address'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new Address entity from a json body (post request). | ||||
| @@ -1,85 +1,85 @@ | ||||
| import { IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import { config } from '../../config'; | ||||
| import { AddressNotFoundError, AddressWrongTypeError } from '../../errors/AddressErrors'; | ||||
| import { Address } from '../entities/Address'; | ||||
| import { GroupContact } from '../entities/GroupContact'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new Group entity from a json body (post request). | ||||
|  */ | ||||
| export class CreateGroupContact { | ||||
|     /** | ||||
|      * The new contact's first name. | ||||
|      */ | ||||
|     @IsNotEmpty() | ||||
|     @IsString() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's middle name. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsString() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's last name. | ||||
|      */ | ||||
|     @IsNotEmpty() | ||||
|     @IsString() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's address. | ||||
|      * Must be the address's id. | ||||
|      */ | ||||
|     @IsInt() | ||||
|     @IsOptional() | ||||
|     address?: number; | ||||
| 
 | ||||
|     /** | ||||
|      * The contact's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The contact's email address. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsEmail() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the new contact's address by it's id. | ||||
|      */ | ||||
|     public async getAddress(): Promise<Address> { | ||||
|         if (this.address === undefined || this.address === null) { | ||||
|             return null; | ||||
|         } | ||||
|         if (!isNaN(this.address)) { | ||||
|             let address = await getConnectionManager().get().getRepository(Address).findOne({ id: this.address }); | ||||
|             if (!address) { throw new AddressNotFoundError; } | ||||
|             return address; | ||||
|         } | ||||
| 
 | ||||
|         throw new AddressWrongTypeError; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Creates a new Address entity from this. | ||||
|      */ | ||||
|     public async toGroupContact(): Promise<GroupContact> { | ||||
|         let contact: GroupContact = new GroupContact(); | ||||
|         contact.firstname = this.firstname; | ||||
|         contact.middlename = this.middlename; | ||||
|         contact.lastname = this.lastname; | ||||
|         contact.email = this.email; | ||||
|         contact.phone = this.phone; | ||||
|         contact.address = await this.getAddress(); | ||||
|         return null; | ||||
|     } | ||||
| import { IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import { config } from '../../config'; | ||||
| import { AddressNotFoundError, AddressWrongTypeError } from '../../errors/AddressErrors'; | ||||
| import { Address } from '../entities/Address'; | ||||
| import { GroupContact } from '../entities/GroupContact'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new Group entity from a json body (post request). | ||||
|  */ | ||||
| export class CreateGroupContact { | ||||
|     /** | ||||
|      * The new contact's first name. | ||||
|      */ | ||||
|     @IsNotEmpty() | ||||
|     @IsString() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's middle name. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsString() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's last name. | ||||
|      */ | ||||
|     @IsNotEmpty() | ||||
|     @IsString() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new contact's address. | ||||
|      * Must be the address's id. | ||||
|      */ | ||||
|     @IsInt() | ||||
|     @IsOptional() | ||||
|     address?: number; | ||||
| 
 | ||||
|     /** | ||||
|      * The contact's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The contact's email address. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsEmail() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the new contact's address by it's id. | ||||
|      */ | ||||
|     public async getAddress(): Promise<Address> { | ||||
|         if (this.address === undefined || this.address === null) { | ||||
|             return null; | ||||
|         } | ||||
|         if (!isNaN(this.address)) { | ||||
|             let address = await getConnectionManager().get().getRepository(Address).findOne({ id: this.address }); | ||||
|             if (!address) { throw new AddressNotFoundError; } | ||||
|             return address; | ||||
|         } | ||||
| 
 | ||||
|         throw new AddressWrongTypeError; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Creates a new Address entity from this. | ||||
|      */ | ||||
|     public async toGroupContact(): Promise<GroupContact> { | ||||
|         let contact: GroupContact = new GroupContact(); | ||||
|         contact.firstname = this.firstname; | ||||
|         contact.middlename = this.middlename; | ||||
|         contact.lastname = this.lastname; | ||||
|         contact.email = this.email; | ||||
|         contact.phone = this.phone; | ||||
|         contact.address = await this.getAddress(); | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
| @@ -1,72 +1,72 @@ | ||||
| import { IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import { config } from '../../config'; | ||||
| import { AddressNotFoundError, AddressWrongTypeError } from '../../errors/AddressErrors'; | ||||
| import { Address } from '../entities/Address'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new Participant entity from a json body (post request). | ||||
|  */ | ||||
| export abstract class CreateParticipant { | ||||
|     /** | ||||
|      * The new participant's first name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsNotEmpty() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's middle name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's last name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsNotEmpty() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's e-mail address. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     @IsEmail() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's address. | ||||
|      * Must be of type number (address id). | ||||
|      */ | ||||
|     @IsInt() | ||||
|     @IsOptional() | ||||
|     address?: number; | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the new participant's address by it's address. | ||||
|      */ | ||||
|     public async getAddress(): Promise<Address> { | ||||
|         if (this.address === undefined || this.address === null) { | ||||
|             return null; | ||||
|         } | ||||
|         if (!isNaN(this.address)) { | ||||
|             let address = await getConnectionManager().get().getRepository(Address).findOne({ id: this.address }); | ||||
|             if (!address) { throw new AddressNotFoundError; } | ||||
|             return address; | ||||
|         } | ||||
| 
 | ||||
|         throw new AddressWrongTypeError; | ||||
|     } | ||||
| import { IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import { config } from '../../config'; | ||||
| import { AddressNotFoundError, AddressWrongTypeError } from '../../errors/AddressErrors'; | ||||
| import { Address } from '../entities/Address'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new Participant entity from a json body (post request). | ||||
|  */ | ||||
| export abstract class CreateParticipant { | ||||
|     /** | ||||
|      * The new participant's first name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsNotEmpty() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's middle name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's last name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsNotEmpty() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's e-mail address. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     @IsEmail() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new participant's address. | ||||
|      * Must be of type number (address id). | ||||
|      */ | ||||
|     @IsInt() | ||||
|     @IsOptional() | ||||
|     address?: number; | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the new participant's address by it's address. | ||||
|      */ | ||||
|     public async getAddress(): Promise<Address> { | ||||
|         if (this.address === undefined || this.address === null) { | ||||
|             return null; | ||||
|         } | ||||
|         if (!isNaN(this.address)) { | ||||
|             let address = await getConnectionManager().get().getRepository(Address).findOne({ id: this.address }); | ||||
|             if (!address) { throw new AddressNotFoundError; } | ||||
|             return address; | ||||
|         } | ||||
| 
 | ||||
|         throw new AddressWrongTypeError; | ||||
|     } | ||||
| } | ||||
| @@ -1,132 +1,132 @@ | ||||
| import * as argon2 from "argon2"; | ||||
| import { IsBoolean, IsEmail, IsOptional, IsPhoneNumber, IsString, IsUrl } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import * as uuid from 'uuid'; | ||||
| import { config } from '../../config'; | ||||
| import { UsernameOrEmailNeededError } from '../../errors/UserErrors'; | ||||
| import { UserGroupNotFoundError } from '../../errors/UserGroupErrors'; | ||||
| import { User } from '../entities/User'; | ||||
| import { UserGroup } from '../entities/UserGroup'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new User entity from a json body (post request). | ||||
|  */ | ||||
| export class CreateUser { | ||||
|     /** | ||||
|      * The new user's first name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's middle name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's last name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's username. | ||||
|      * You have to provide at least one of: {email, username}. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsString() | ||||
|     username?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's email address. | ||||
|      * You have to provide at least one of: {email, username}. | ||||
|      */ | ||||
|     @IsEmail() | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     @IsOptional() | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's password. | ||||
|      * This will of course not be saved in plaintext :) | ||||
|      */ | ||||
|     @IsString() | ||||
|     password: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Will the new user be enabled from the start? | ||||
|      * Default: true | ||||
|      */ | ||||
|     @IsBoolean() | ||||
|     @IsOptional() | ||||
|     enabled?: boolean = true; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's groups' id(s). | ||||
|      * You can provide either one groupId or an array of groupIDs. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     groups?: number[] | number | ||||
| 
 | ||||
|     /** | ||||
|     * The user's profile pic (or rather a url pointing to it). | ||||
|     */ | ||||
|     @IsString() | ||||
|     @IsUrl() | ||||
|     @IsOptional() | ||||
|     profilePic?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Converts this to a User entity. | ||||
|      */ | ||||
|     public async toUser(): Promise<User> { | ||||
|         let newUser: User = new User(); | ||||
| 
 | ||||
|         if (this.email === undefined && this.username === undefined) { | ||||
|             throw new UsernameOrEmailNeededError(); | ||||
|         } | ||||
| 
 | ||||
|         newUser.email = this.email | ||||
|         newUser.username = this.username | ||||
|         newUser.firstname = this.firstname | ||||
|         newUser.middlename = this.middlename | ||||
|         newUser.lastname = this.lastname | ||||
|         newUser.uuid = uuid.v4() | ||||
|         newUser.phone = this.phone | ||||
|         newUser.password = await argon2.hash(this.password + newUser.uuid); | ||||
|         newUser.groups = await this.getGroups(); | ||||
|         newUser.enabled = this.enabled; | ||||
| 
 | ||||
|         if (!this.profilePic) { newUser.profilePic = `https://dev.lauf-fuer-kaya.de/lfk-logo.png`; } | ||||
|         else { newUser.profilePic = this.profilePic; } | ||||
| 
 | ||||
|         return newUser; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Get's all groups for this user by their id's; | ||||
|      */ | ||||
|     public async getGroups() { | ||||
|         if (!this.groups) { return null; } | ||||
|         let groups = new Array<UserGroup>(); | ||||
|         if (!Array.isArray(this.groups)) { | ||||
|             this.groups = [this.groups] | ||||
|         } | ||||
|         for (let group of this.groups) { | ||||
|             let found = await getConnectionManager().get().getRepository(UserGroup).findOne({ id: group }); | ||||
|             if (!found) { throw new UserGroupNotFoundError(); } | ||||
|             groups.push(found); | ||||
|         } | ||||
|         return groups; | ||||
|     } | ||||
| import * as argon2 from "argon2"; | ||||
| import { IsBoolean, IsEmail, IsOptional, IsPhoneNumber, IsString, IsUrl } from 'class-validator'; | ||||
| import { getConnectionManager } from 'typeorm'; | ||||
| import * as uuid from 'uuid'; | ||||
| import { config } from '../../config'; | ||||
| import { UsernameOrEmailNeededError } from '../../errors/UserErrors'; | ||||
| import { UserGroupNotFoundError } from '../../errors/UserGroupErrors'; | ||||
| import { User } from '../entities/User'; | ||||
| import { UserGroup } from '../entities/UserGroup'; | ||||
| 
 | ||||
| /** | ||||
|  * This classed is used to create a new User entity from a json body (post request). | ||||
|  */ | ||||
| export class CreateUser { | ||||
|     /** | ||||
|      * The new user's first name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     firstname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's middle name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     middlename?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's last name. | ||||
|      */ | ||||
|     @IsString() | ||||
|     lastname: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's username. | ||||
|      * You have to provide at least one of: {email, username}. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     @IsString() | ||||
|     username?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's email address. | ||||
|      * You have to provide at least one of: {email, username}. | ||||
|      */ | ||||
|     @IsEmail() | ||||
|     @IsString() | ||||
|     @IsOptional() | ||||
|     email?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's phone number. | ||||
|      * This will be validated against the configured country phone numer syntax (default: international). | ||||
|      */ | ||||
|     @IsPhoneNumber(config.phone_validation_countrycode) | ||||
|     @IsOptional() | ||||
|     phone?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's password. | ||||
|      * This will of course not be saved in plaintext :) | ||||
|      */ | ||||
|     @IsString() | ||||
|     password: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Will the new user be enabled from the start? | ||||
|      * Default: true | ||||
|      */ | ||||
|     @IsBoolean() | ||||
|     @IsOptional() | ||||
|     enabled?: boolean = true; | ||||
| 
 | ||||
|     /** | ||||
|      * The new user's groups' id(s). | ||||
|      * You can provide either one groupId or an array of groupIDs. | ||||
|      */ | ||||
|     @IsOptional() | ||||
|     groups?: number[] | number | ||||
| 
 | ||||
|     /** | ||||
|     * The user's profile pic (or rather a url pointing to it). | ||||
|     */ | ||||
|     @IsString() | ||||
|     @IsUrl() | ||||
|     @IsOptional() | ||||
|     profilePic?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Converts this to a User entity. | ||||
|      */ | ||||
|     public async toUser(): Promise<User> { | ||||
|         let newUser: User = new User(); | ||||
| 
 | ||||
|         if (this.email === undefined && this.username === undefined) { | ||||
|             throw new UsernameOrEmailNeededError(); | ||||
|         } | ||||
| 
 | ||||
|         newUser.email = this.email | ||||
|         newUser.username = this.username | ||||
|         newUser.firstname = this.firstname | ||||
|         newUser.middlename = this.middlename | ||||
|         newUser.lastname = this.lastname | ||||
|         newUser.uuid = uuid.v4() | ||||
|         newUser.phone = this.phone | ||||
|         newUser.password = await argon2.hash(this.password + newUser.uuid); | ||||
|         newUser.groups = await this.getGroups(); | ||||
|         newUser.enabled = this.enabled; | ||||
| 
 | ||||
|         if (!this.profilePic) { newUser.profilePic = `https://dev.lauf-fuer-kaya.de/lfk-logo.png`; } | ||||
|         else { newUser.profilePic = this.profilePic; } | ||||
| 
 | ||||
|         return newUser; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Get's all groups for this user by their id's; | ||||
|      */ | ||||
|     public async getGroups() { | ||||
|         if (!this.groups) { return null; } | ||||
|         let groups = new Array<UserGroup>(); | ||||
|         if (!Array.isArray(this.groups)) { | ||||
|             this.groups = [this.groups] | ||||
|         } | ||||
|         for (let group of this.groups) { | ||||
|             let found = await getConnectionManager().get().getRepository(UserGroup).findOne({ id: group }); | ||||
|             if (!found) { throw new UserGroupNotFoundError(); } | ||||
|             groups.push(found); | ||||
|         } | ||||
|         return groups; | ||||
|     } | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| import { IsBoolean, IsInt, IsOptional } from 'class-validator'; | ||||
| import { DonorReceiptAddressNeededError } from '../../errors/DonorErrors'; | ||||
| import { Donor } from '../entities/Donor'; | ||||
| import { DonorReceiptAddressNeededError } from '../../../errors/DonorErrors'; | ||||
| import { Donor } from '../../entities/Donor'; | ||||
| import { CreateParticipant } from './CreateParticipant'; | ||||
| 
 | ||||
| /** | ||||
		Reference in New Issue
	
	Block a user