All files / api/user/domain index.ts

0% Statements 0/12
0% Branches 0/3
0% Functions 0/4
0% Lines 0/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                                                       
import { IUserAggregate } from '@INTERFACE/user/domain';
 
const permissionLevel: { [key in IUserAggregate.Permission]: number } = {
  Admin: 0,
  Manager: 1,
  Normal: 2,
};
 
export const UserAggregate: IUserAggregate = {
  get(args) {
    const now = new Date();
    const {
      username,
      email,
      role = 'Normal',
      id,
      created_at = now,
      updated_at = now,
    } = args;
    return { id, created_at, updated_at, username, email, role };
  },
  getPublic(args) {
    const { id, email, username, role } = args;
    return { id, email, username, role };
  },
  setRole(agg, role) {
    (agg as any).role = role;
    return agg;
  },
  checkPermission({ user, target }) {
    const ulevel = permissionLevel[user];
    const tlevel = permissionLevel[target];
    return ulevel <= tlevel;
  },
};