Skip to content

Commit 1f3823b

Browse files
SalleeMatthewsmile0711
authored andcommitted
Add Blackmarket Functionality
Adding functionality to the Blackmarket. Add shared objects to Plaza Removed unused code from Fleamarket
1 parent 8aeb560 commit 1f3823b

12 files changed

Lines changed: 265 additions & 479 deletions

File tree

api/src/api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import morgan from 'morgan';
77
import {
88
adminRoutes,
99
avatarRoutes,
10+
blackmarketRoutes,
1011
blockRoutes,
1112
clubRoutes,
1213
colonyRoutes,
@@ -63,6 +64,7 @@ app.use('/api/messageboard', messageboardRoutes);
6364
app.use('/api/admin', adminRoutes);
6465
app.use('/api/inbox', inboxRoutes);
6566
app.use('/api/mall', mallRoutes);
67+
app.use('/api/blackmarket', blackmarketRoutes);
6668
app.use('/api/fleamarket', fleamarketRoutes);
6769
app.use('/api/club', clubRoutes);
6870
app.use('/api/vote', voteRoutes);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Request, Response } from 'express';
2+
import { Container } from 'typedi';
3+
4+
import {
5+
MemberService,
6+
BlackMarketService,
7+
} from '../services';
8+
9+
class BlackmarketController {
10+
constructor(
11+
private memberService: MemberService,
12+
private blackMarketService: BlackMarketService,
13+
14+
) {}
15+
16+
public async canAdmin(request: Request, response: Response): Promise<void> {
17+
const { apitoken } = request.headers;
18+
19+
try {
20+
const session = this.memberService.decodeMemberToken(<string>apitoken);
21+
if (!session || !(await this.blackMarketService.canAdmin(session.id))) {
22+
response.status(400).json({
23+
error: 'Invalid or missing token or access denied.',
24+
});
25+
return;
26+
}
27+
response.status(200).json({ status: 'success' });
28+
} catch (error) {
29+
console.error(error);
30+
response.status(400).json({ error });
31+
}
32+
}
33+
34+
35+
}
36+
const memberService = Container.get(MemberService);
37+
const blackmarketService = Container.get(BlackMarketService);
38+
export const blackmarketController = new BlackmarketController(
39+
memberService,
40+
blackmarketService,
41+
);

api/src/controllers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './admin.controller';
22
export * from './avatar.controller';
3+
export * from './blackmarket.controller';
34
export * from './block.controller';
45
export * from './club.controller';
56
export * from './colony.controller';

api/src/controllers/object-instance.controller.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { Request, Response } from 'express';
22
import { Container } from 'typedi';
3-
import { MemberService, ObjectInstanceService, PlaceService, FleaMarketService } from '../services';
3+
import {
4+
MemberService,
5+
ObjectInstanceService,
6+
PlaceService,
7+
FleaMarketService,
8+
BlackMarketService } from '../services';
49
import * as badwords from 'badwords-list';
510

611
class ObjectInstanceController {
@@ -9,6 +14,7 @@ class ObjectInstanceController {
914
private placeService: PlaceService,
1015
private memberService: MemberService,
1116
private fleaMarketService: FleaMarketService,
17+
private blackMarketService: BlackMarketService,
1218
) {}
1319

1420
/** Stores the position of an object instance in the database */
@@ -36,6 +42,9 @@ class ObjectInstanceController {
3642
if(place.slug === 'fleamarket'){
3743
adminStatus = await this.fleaMarketService.canAdmin(session.id);
3844
}
45+
if(place.slug === 'blackmarket'){
46+
adminStatus = await this.blackMarketService.canAdmin(session.id);
47+
}
3948
if (!adminStatus && objectInstance.member_id != session.id) {
4049
throw new Error('Not the owner of this object');
4150
}
@@ -74,11 +83,14 @@ class ObjectInstanceController {
7483
const objectInstance = await this.objectInstanceService.find(id);
7584
const place = await this.placeService.findById(Number.parseInt(request.body.placeId));
7685

77-
if (place.slug !== 'fleamarket' && place.member_id != session.id) {
86+
if (
87+
place.slug !== 'fleamarket' &&
88+
place.slug !== 'blackmarket' &&
89+
place.member_id !== session.id) {
7890
throw new Error('Not the owner of this place');
7991
}
8092

81-
if (objectInstance.member_id != session.id) {
93+
if (objectInstance.member_id !== session.id) {
8294
throw new Error('Not the owner of this object');
8395
}
8496

@@ -235,7 +247,9 @@ class ObjectInstanceController {
235247
if(place.slug === 'fleamarket'){
236248
adminStatus = await this.fleaMarketService.canAdmin(session.id);
237249
}
238-
250+
if(place.slug === 'blackmarket'){
251+
adminStatus = await this.blackMarketService.canAdmin(session.id);
252+
}
239253
if (!adminStatus && objectInstance.member_id != session.id) {
240254
throw new Error('Not the owner of this object');
241255
}
@@ -251,9 +265,11 @@ const objectInstanceService = Container.get(ObjectInstanceService);
251265
const placeService = Container.get(PlaceService);
252266
const memberService = Container.get(MemberService);
253267
const fleaMarketService = Container.get(FleaMarketService);
268+
const blackMarketService = Container.get(BlackMarketService);
254269
export const objectInstanceController = new ObjectInstanceController(
255270
objectInstanceService,
256271
placeService,
257272
memberService,
258273
fleaMarketService,
274+
blackMarketService,
259275
);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Router from 'express';
2+
3+
import { blackmarketController } from '../controllers';
4+
5+
6+
const blackmarketRoutes = Router();
7+
blackmarketRoutes.get('/can_admin', (request, response) =>
8+
blackmarketController.canAdmin(request, response));
9+
10+
export { blackmarketRoutes };

api/src/routes/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './admin.routes';
22
export * from './avatar.routes';
3+
export * from './blackmarket.routes';
34
export * from './block.routes';
45
export * from './club.routes';
56
export * from './colony.routes';
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Service } from 'typedi';
2+
3+
import {
4+
RoleAssignmentRepository,
5+
RoleRepository,
6+
} from '../../repositories';
7+
8+
/**
9+
* Service for dealing with the black market.
10+
* "Admin" access refers to members assigned one of the following roles:
11+
* Admin, BlackMarketDeputy, or BlackMarketChief.
12+
*/
13+
@Service()
14+
export class BlackMarketService {
15+
constructor(
16+
private roleAssignmentRepository: RoleAssignmentRepository,
17+
private roleRepository: RoleRepository,
18+
) {}
19+
20+
public async canAdmin(memberId: number): Promise<boolean> {
21+
const roleAssignments = await this.roleAssignmentRepository.getByMemberId(memberId);
22+
if (
23+
roleAssignments.find(assignment => {
24+
return [
25+
this.roleRepository.roleMap.Admin,
26+
this.roleRepository.roleMap.BlackMarketDeputy,
27+
this.roleRepository.roleMap.BlackMarketChief,
28+
].includes(assignment.role_id);
29+
})
30+
) {
31+
return true;
32+
}
33+
return false;
34+
}
35+
}

api/src/services/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './admin/admin.services';
22
export * from './avatar/avatar.service';
3+
export * from './blackmarket/blackmarket.service';
34
export * from './block/block.service';
45
export * from './club/club.service';
56
export * from './colony/colony.service';

0 commit comments

Comments
 (0)