2022-07-22 03:28:46 +00:00

219 lines
6.8 KiB
TypeScript

import { Injectable } from '@angular/core';
import { assign, cloneDeep } from 'lodash-es';
import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api';
import { users as usersData } from './data';
@Injectable({
providedIn: 'root',
})
export class MemberUserMockApi {
private _users: any[] = usersData;
/**
* Constructor
*/
constructor(private _fuseMockApiService: FuseMockApiService) {
// Register Mock API handlers
this.registerHandlers();
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Register Mock API handlers
*/
registerHandlers(): void {
// -----------------------------------------------------------------------------------------------------
// @ Users - GET
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService
.onGet('api/apps/member/user/users', 300)
.reply(({ request }) => {
// Get available queries
const search = request.params.get('search');
const sort = request.params.get('sort') || 'signinId';
const order = request.params.get('order') || 'asc';
const page = parseInt(request.params.get('page') ?? '1', 10);
const size = parseInt(request.params.get('size') ?? '10', 10);
// Clone the users
let users: any[] | null = cloneDeep(this._users);
// Sort the users
if (sort === 'signinId' || sort === 'nickname' || sort === 'state') {
users.sort((a, b) => {
const fieldA = a[sort].toString().toUpperCase();
const fieldB = b[sort].toString().toUpperCase();
return order === 'asc'
? fieldA.localeCompare(fieldB)
: fieldB.localeCompare(fieldA);
});
} else {
users.sort((a, b) =>
order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort]
);
}
// If search exists...
if (search) {
// Filter the users
users = users.filter(
(contact: any) =>
contact.name &&
contact.name.toLowerCase().includes(search.toLowerCase())
);
}
// Paginate - Start
const usersLength = users.length;
// Calculate pagination details
const begin = page * size;
const end = Math.min(size * (page + 1), usersLength);
const lastPage = Math.max(Math.ceil(usersLength / size), 1);
// Prepare the pagination object
let pagination = {};
// If the requested page number is bigger than
// the last possible page number, return null for
// users but also send the last possible page so
// the app can navigate to there
if (page > lastPage) {
users = null;
pagination = {
lastPage,
};
} else {
// Paginate the results by size
users = users.slice(begin, end);
// Prepare the pagination mock-api
pagination = {
length: usersLength,
size: size,
page: page,
lastPage: lastPage,
startIndex: begin,
endIndex: end - 1,
};
}
// Return the response
return [
200,
{
users,
pagination,
},
];
});
// -----------------------------------------------------------------------------------------------------
// @ User - GET
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService
.onGet('api/apps/member/user/user')
.reply(({ request }) => {
// Get the id from the params
const id = request.params.get('id');
// Clone the users
const users = cloneDeep(this._users);
// Find the user
const user = users.find((item: any) => item.id === id);
// Return the response
return [200, user];
});
// -----------------------------------------------------------------------------------------------------
// @ User - POST
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService.onPost('api/apps/member/user/user').reply(() => {
// Generate a new user
const newUser = {
id: FuseMockApiUtils.guid(),
signinId: '',
signinPw: '',
exchangePw: '',
nickname: '',
highRank: '',
rank: '',
level: '',
accountHolder: '',
phoneNumber: '',
ownCash: 0,
ownComp: 0,
ownCoupon: 0,
gameMoney: 0,
todayComp: 0,
totalDeposit: 0,
totalWithdraw: 0,
balance: 0,
registDate: '2022-01-01T16:00',
finalSigninDate: '2022-01-01T16:00',
ip: '192.168.1.9',
state: '정상',
};
// Unshift the new user
this._users.unshift(newUser);
// Return the response
return [200, newUser];
});
// -----------------------------------------------------------------------------------------------------
// @ User - PATCH
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService
.onPatch('api/apps/member/user/user')
.reply(({ request }) => {
// Get the id and user
const id = request.body.id;
const user = cloneDeep(request.body.user);
// Prepare the updated user
let updatedUser = null;
// Find the user and update it
this._users.forEach((item, index, users) => {
if (item.id === id) {
// Update the user
users[index] = assign({}, users[index], user);
// Store the updated user
updatedUser = users[index];
}
});
// Return the response
return [200, updatedUser];
});
// -----------------------------------------------------------------------------------------------------
// @ User - DELETE
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService
.onDelete('api/apps/member/user/user')
.reply(({ request }) => {
// Get the id
const id = request.params.get('id');
// Find the user and delete it
this._users.forEach((item, index) => {
if (item.id === id) {
this._users.splice(index, 1);
}
});
// Return the response
return [200, true];
});
}
}