1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-11 03:34:35 +00:00

chore: code refactor

This commit is contained in:
Saad Jutt
2022-07-03 07:03:15 +05:00
parent 9c3da56901
commit eee3a7b084
3 changed files with 35 additions and 31 deletions

View File

@@ -20,7 +20,7 @@ export interface GroupResponse {
description: string description: string
} }
interface GroupDetailsResponse { export interface GroupDetailsResponse {
groupId: number groupId: number
name: string name: string
description: string description: string
@@ -249,9 +249,10 @@ const updateUsersListInGroup = async (
message: 'User not found.' message: 'User not found.'
} }
const updatedGroup = (action === 'addUser' const updatedGroup =
? await group.addUser(user._id) action === 'addUser'
: await group.removeUser(user._id)) as unknown as GroupDetailsResponse ? await group.addUser(user)
: await group.removeUser(user)
if (!updatedGroup) if (!updatedGroup)
throw { throw {
@@ -260,9 +261,6 @@ const updateUsersListInGroup = async (
message: 'Unable to update group.' message: 'Unable to update group.'
} }
if (action === 'addUser') user.addGroup(group._id)
else user.removeGroup(group._id)
return { return {
groupId: updatedGroup.groupId, groupId: updatedGroup.groupId,
name: updatedGroup.name, name: updatedGroup.name,

View File

@@ -1,5 +1,6 @@
import mongoose, { Schema, model, Document, Model } from 'mongoose' import mongoose, { Schema, model, Document, Model } from 'mongoose'
import User from './User' import { GroupDetailsResponse } from '../controllers'
import User, { IUser } from './User'
const AutoIncrement = require('mongoose-sequence')(mongoose) const AutoIncrement = require('mongoose-sequence')(mongoose)
export interface GroupPayload { export interface GroupPayload {
@@ -27,8 +28,9 @@ interface IGroupDocument extends GroupPayload, Document {
} }
interface IGroup extends IGroupDocument { interface IGroup extends IGroupDocument {
addUser(userObjectId: Schema.Types.ObjectId): Promise<IGroup> addUser(user: IUser): Promise<GroupDetailsResponse>
removeUser(userObjectId: Schema.Types.ObjectId): Promise<IGroup> removeUser(user: IUser): Promise<GroupDetailsResponse>
hasUser(user: IUser): boolean
} }
interface IGroupModel extends Model<IGroup> {} interface IGroupModel extends Model<IGroup> {}
@@ -70,28 +72,31 @@ groupSchema.pre('remove', async function () {
}) })
// Instance Methods // Instance Methods
groupSchema.method( groupSchema.method('addUser', async function (user: IUser) {
'addUser', const userObjectId = user._id
async function (userObjectId: Schema.Types.ObjectId) { const userIdIndex = this.users.indexOf(userObjectId)
const userIdIndex = this.users.indexOf(userObjectId) if (userIdIndex === -1) {
if (userIdIndex === -1) { this.users.push(userObjectId)
this.users.push(userObjectId) user.addGroup(this._id)
}
this.markModified('users')
return this.save()
} }
) this.markModified('users')
groupSchema.method( return this.save()
'removeUser', })
async function (userObjectId: Schema.Types.ObjectId) { groupSchema.method('removeUser', async function (user: IUser) {
const userIdIndex = this.users.indexOf(userObjectId) const userObjectId = user._id
if (userIdIndex > -1) { const userIdIndex = this.users.indexOf(userObjectId)
this.users.splice(userIdIndex, 1) if (userIdIndex > -1) {
} this.users.splice(userIdIndex, 1)
this.markModified('users') user.removeGroup(this._id)
return this.save()
} }
) this.markModified('users')
return this.save()
})
groupSchema.method('hasUser', function (user: IUser) {
const userObjectId = user._id
const userIdIndex = this.users.indexOf(userObjectId)
return userIdIndex > -1
})
export const Group: IGroupModel = model<IGroup, IGroupModel>( export const Group: IGroupModel = model<IGroup, IGroupModel>(
'Group', 'Group',

View File

@@ -35,6 +35,7 @@ export interface UserPayload {
} }
interface IUserDocument extends UserPayload, Document { interface IUserDocument extends UserPayload, Document {
_id: Schema.Types.ObjectId
id: number id: number
isAdmin: boolean isAdmin: boolean
isActive: boolean isActive: boolean
@@ -43,7 +44,7 @@ interface IUserDocument extends UserPayload, Document {
tokens: [{ [key: string]: string }] tokens: [{ [key: string]: string }]
} }
interface IUser extends IUserDocument { export interface IUser extends IUserDocument {
comparePassword(password: string): boolean comparePassword(password: string): boolean
addGroup(groupObjectId: Schema.Types.ObjectId): Promise<IUser> addGroup(groupObjectId: Schema.Types.ObjectId): Promise<IUser>
removeGroup(groupObjectId: Schema.Types.ObjectId): Promise<IUser> removeGroup(groupObjectId: Schema.Types.ObjectId): Promise<IUser>