Skip to content

Commit

Permalink
Merge pull request #45 from UoaWDCC/WFJB2-63-back-end---routes-for-user
Browse files Browse the repository at this point in the history
[WFJB2-63] back-end routes for user
  • Loading branch information
GodYazza authored Aug 3, 2024
2 parents 0d6c1d1 + c5b71a8 commit 3a10294
Show file tree
Hide file tree
Showing 10 changed files with 330 additions and 6 deletions.
82 changes: 82 additions & 0 deletions api/src/controllers/alumni.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import {
Count,
CountSchema,
Filter,
FilterExcludingWhere,
repository,
Where,
} from '@loopback/repository';
import {
post,
param,
get,
getModelSchemaRef,
patch,
put,
del,
requestBody,
response,
} from '@loopback/rest';
import {Alumni, FsaeRole} from '../models';
import {AlumniRepository} from '../repositories';
import { authenticate } from '@loopback/authentication';
import { authorize } from '@loopback/authorization';

@authenticate('fsae-jwt')
export class AlumniController {
constructor(
@repository(AlumniRepository)
public alumniRepository : AlumniRepository,
) {}

@authorize({
allowedRoles: [FsaeRole.ALUMNI],
})
@get('/user/alumni/{id}')
@response(200, {
description: 'Alumni model instance',
content: {
'application/json': {
schema: getModelSchemaRef(Alumni, {includeRelations: true}),
},
},
})
async findById(
@param.path.number('id') id: number,
@param.filter(Alumni, {exclude: 'where'}) filter?: FilterExcludingWhere<Alumni>
): Promise<Alumni> {
return this.alumniRepository.findById(id, filter);
}

@authorize({
allowedRoles: [FsaeRole.ALUMNI],
})
@patch('/user/alumni/{id}')
@response(204, {
description: 'Alumni PATCH success',
})
async updateById(
@param.path.number('id') id: number,
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(Alumni, {partial: true}),
},
},
})
alumni: Alumni,
): Promise<void> {
await this.alumniRepository.updateById(id, alumni);
}

@authorize({
allowedRoles: [FsaeRole.ADMIN],
})
@del('/user/alumni/{id}')
@response(204, {
description: 'Alumni DELETE success',
})
async deleteById(@param.path.number('id') id: number): Promise<void> {
await this.alumniRepository.deleteById(id);
}
}
3 changes: 3 additions & 0 deletions api/src/controllers/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
export * from './ping.controller';
export * from './member.controller';
export * from './alumni.controller';
export * from './sponsor.controller';
export * from './login.controller';
export * from './register.controller';
82 changes: 82 additions & 0 deletions api/src/controllers/member.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import {
Count,
CountSchema,
Filter,
FilterExcludingWhere,
repository,
Where,
} from '@loopback/repository';
import {
post,
param,
get,
getModelSchemaRef,
patch,
put,
del,
requestBody,
response,
} from '@loopback/rest';
import {FsaeRole, Member} from '../models';
import {MemberRepository} from '../repositories';
import { authenticate } from '@loopback/authentication';
import { authorize } from '@loopback/authorization';

@authenticate('fsae-jwt')
export class MemberController {
constructor(
@repository(MemberRepository)
public memberRepository : MemberRepository,
) {}

@authorize({
allowedRoles: [FsaeRole.MEMBER],
})
@get('/user/member/{id}')
@response(200, {
description: 'Member model instance',
content: {
'application/json': {
schema: getModelSchemaRef(Member, {includeRelations: true}),
},
},
})
async findById(
@param.path.number('id') id: number,
@param.filter(Member, {exclude: 'where'}) filter?: FilterExcludingWhere<Member>
): Promise<Member> {
return this.memberRepository.findById(id, filter);
}

@authorize({
allowedRoles: [FsaeRole.MEMBER],
})
@patch('/user/member/{id}')
@response(204, {
description: 'Member PATCH success',
})
async updateById(
@param.path.number('id') id: number,
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(Member, {partial: true}),
},
},
})
member: Member,
): Promise<void> {
await this.memberRepository.updateById(id, member);
}

@authorize({
allowedRoles: [FsaeRole.ADMIN],
})
@del('/user/member/{id}')
@response(204, {
description: 'Member DELETE success',
})
async deleteById(@param.path.number('id') id: number): Promise<void> {
await this.memberRepository.deleteById(id);
}
}
82 changes: 82 additions & 0 deletions api/src/controllers/sponsor.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import {
Count,
CountSchema,
Filter,
FilterExcludingWhere,
repository,
Where,
} from '@loopback/repository';
import {
post,
param,
get,
getModelSchemaRef,
patch,
put,
del,
requestBody,
response,
} from '@loopback/rest';
import {FsaeRole, Sponsor} from '../models';
import {SponsorRepository} from '../repositories';
import { authenticate } from '@loopback/authentication';
import { authorize } from '@loopback/authorization';

@authenticate('fsae-jwt')
export class SponsorController {
constructor(
@repository(SponsorRepository)
public sponsorRepository : SponsorRepository,
) {}

@authorize({
allowedRoles: [FsaeRole.SPONSOR],
})
@get('/user/sponsor/{id}')
@response(200, {
description: 'Sponsor model instance',
content: {
'application/json': {
schema: getModelSchemaRef(Sponsor, {includeRelations: true}),
},
},
})
async findById(
@param.path.number('id') id: number,
@param.filter(Sponsor, {exclude: 'where'}) filter?: FilterExcludingWhere<Sponsor>
): Promise<Sponsor> {
return this.sponsorRepository.findById(id, filter);
}

@authorize({
allowedRoles: [FsaeRole.SPONSOR],
})
@patch('/user/sponsor/{id}')
@response(204, {
description: 'Sponsor PATCH success',
})
async updateById(
@param.path.number('id') id: number,
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(Sponsor, {partial: true}),
},
},
})
sponsor: Sponsor,
): Promise<void> {
await this.sponsorRepository.updateById(id, sponsor);
}

@authorize({
allowedRoles: [FsaeRole.ADMIN],
})
@del('/user/sponsor/{id}')
@response(204, {
description: 'Sponsor DELETE success',
})
async deleteById(@param.path.number('id') id: number): Promise<void> {
await this.sponsorRepository.deleteById(id);
}
}
19 changes: 18 additions & 1 deletion api/src/models/alumni.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,24 @@ import {FsaeUser} from './index';

@model({settings: {strict: false}})
export class Alumni extends FsaeUser {
// Define well-known properties here
@property({
type: 'number',
id: true,
generated: true,
})
alumniID?: number;

@property({
type: 'string',
required: false,
})
subGroup: string;

@property({
type: 'string',
required: false,
})
company: string;

// Indexer property to allow additional data
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Expand Down
25 changes: 24 additions & 1 deletion api/src/models/member.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,30 @@ import {FsaeUser} from './fsae-user.model';

@model({settings: {strict: false}})
export class Member extends FsaeUser {
// Define well-known properties here
@property({
type: 'number',
id: true,
generated: true,
})
memberID?: number;

@property({
type: 'string',
required: false,
})
cv: string;

@property({
type: 'string',
required: false,
})
subGroup: string;

@property({
type: 'string',
required: false,
})
photo: string;

// Indexer property to allow additional data
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Expand Down
37 changes: 36 additions & 1 deletion api/src/models/sponsor.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,42 @@ import {FsaeUser} from './fsae-user.model';

@model({settings: {strict: false}})
export class Sponsor extends FsaeUser {
// Define well-known properties here
@property({
type: 'number',
id: true,
generated: true,
})
sponsorID?: number;

@property({
type: 'string',
required: false,
})
logo: string;

@property({
type: 'string',
required: false,
})
websiteURL: string;

@property({
type: 'string',
required: false,
})
tier: string;

@property({
type: 'string',
required: false,
})
name: string;

@property({
type: 'string',
required: false,
})
industry: string;

// Indexer property to allow additional data
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Expand Down
2 changes: 1 addition & 1 deletion api/src/repositories/alumni.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {Alumni, AlumniRelations} from '../models';

export class AlumniRepository extends DefaultCrudRepository<
Alumni,
typeof Alumni.prototype.id,
typeof Alumni.prototype.AlumniID,
AlumniRelations
> {
constructor(
Expand Down
2 changes: 1 addition & 1 deletion api/src/repositories/member.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {Member, MemberRelations} from '../models';

export class MemberRepository extends DefaultCrudRepository<
Member,
typeof Member.prototype.id,
typeof Member.prototype.memberID,
MemberRelations
> {
constructor(
Expand Down
2 changes: 1 addition & 1 deletion api/src/repositories/sponsor.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {Sponsor, SponsorRelations} from '../models';

export class SponsorRepository extends DefaultCrudRepository<
Sponsor,
typeof Sponsor.prototype.id,
typeof Sponsor.prototype.AlumniID,
SponsorRelations
> {
constructor(
Expand Down

0 comments on commit 3a10294

Please sign in to comment.