Skip to content

Commit 4f0b4d7

Browse files
committed
refactor: simplify updateTeams and updateMembers methods for improved readability and maintainability
1 parent bbf042a commit 4f0b4d7

File tree

1 file changed

+59
-62
lines changed

1 file changed

+59
-62
lines changed

backend/src/services/teams.service.ts

Lines changed: 59 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,18 @@ import mongoose from "mongoose";
33
import logger from "./logger.js";
44

55
class TeamsService {
6-
async updateTeams(org: string, teams: Endpoints["GET /orgs/{org}/teams"]["response"]["data"]) {
7-
const Team = mongoose.model('Team');
6+
async updateTeams(
7+
org: string,
8+
teams: Endpoints["GET /orgs/{org}/teams"]["response"]["data"]
9+
) {
10+
const Team = mongoose.model("Team");
811

912
for (const team of teams) {
1013
await Team.findOneAndUpdate(
1114
{ githubId: team.id }, // search criteria
1215
{
1316
org,
14-
team: team.slug,
15-
githubId: team.id,
16-
node_id: team.node_id,
17-
name: team.name,
18-
slug: team.slug,
19-
description: team.description,
20-
privacy: team.privacy || 'unknown',
21-
notification_setting: team.notification_setting || 'unknown',
22-
permission: team.permission,
23-
url: team.url,
24-
html_url: team.html_url,
25-
members_url: team.members_url,
26-
repositories_url: team.repositories_url
17+
...team,
2718
},
2819
{ upsert: true, new: true } // create if doesn't exist, return updated doc
2920
);
@@ -46,37 +37,40 @@ class TeamsService {
4637
{ githubId: -1 },
4738
{
4839
org,
49-
name: 'No Team',
50-
slug: 'no-team',
51-
description: 'No team assigned',
52-
node_id: '',
53-
permission: '',
54-
url: '',
55-
html_url: '',
56-
members_url: '',
57-
repositories_url: '',
58-
githubId: -1
40+
name: "No Team",
41+
slug: "no-team",
42+
description: "No team assigned",
43+
node_id: "",
44+
permission: "",
45+
url: "",
46+
html_url: "",
47+
members_url: "",
48+
repositories_url: "",
49+
githubId: -1,
5950
},
6051
{ upsert: true, new: true }
6152
);
6253
}
6354

64-
async updateMembers(org: string, members: Endpoints["GET /orgs/{org}/teams/{team_slug}/members"]["response"]["data"]) {
65-
const Members = mongoose.model('Member');
55+
async updateMembers(
56+
org: string,
57+
members: Endpoints["GET /orgs/{org}/teams/{team_slug}/members"]["response"]["data"]
58+
) {
59+
const Members = mongoose.model("Member");
6660
const bulkOps = members.map((member) => ({
6761
updateOne: {
6862
filter: { org, id: member.id },
6963
update: { $set: member },
70-
upsert: true
71-
}
64+
upsert: true,
65+
},
7266
}));
7367
await Members.bulkWrite(bulkOps, { ordered: false });
7468
}
7569

7670
async addMemberToTeam(teamId: number, memberId: number) {
77-
const Team = mongoose.model('Team');
78-
const Member = mongoose.model('Member');
79-
const TeamMember = mongoose.model('TeamMember');
71+
const Team = mongoose.model("Team");
72+
const Member = mongoose.model("Member");
73+
const TeamMember = mongoose.model("TeamMember");
8074

8175
// Find Team and Member documents to get their MongoDB _ids
8276
const team = await Team.findOne({ githubId: teamId });
@@ -96,17 +90,20 @@ class TeamsService {
9690
}
9791

9892
async deleteMemberFromTeam(teamId: number, memberId: number) {
99-
const TeamMember = mongoose.model('TeamMember');
100-
const deleted = await TeamMember.deleteOne({ team: teamId, member: memberId });
93+
const TeamMember = mongoose.model("TeamMember");
94+
const deleted = await TeamMember.deleteOne({
95+
team: teamId,
96+
member: memberId,
97+
});
10198
if (deleted.deletedCount === 0) {
10299
throw new Error(`Member ${memberId} is not part of team ${teamId}`);
103100
}
104101
return true;
105102
}
106103

107104
async deleteMember(memberId: number) {
108-
const Member = mongoose.model('Member');
109-
const TeamMember = mongoose.model('TeamMember');
105+
const Member = mongoose.model("Member");
106+
const TeamMember = mongoose.model("TeamMember");
110107

111108
await TeamMember.deleteMany({ member: memberId });
112109
const deleted = await Member.deleteOne({ id: memberId });
@@ -117,8 +114,8 @@ class TeamsService {
117114
}
118115

119116
async deleteTeam(teamId: number) {
120-
const Team = mongoose.model('Team');
121-
const TeamMember = mongoose.model('TeamMember');
117+
const Team = mongoose.model("Team");
118+
const TeamMember = mongoose.model("TeamMember");
122119

123120
await TeamMember.deleteMany({ team: teamId });
124121
const deleted = await Team.deleteOne({ githubId: teamId });
@@ -129,59 +126,59 @@ class TeamsService {
129126
}
130127

131128
async getLastUpdatedAt(org?: string): Promise<Date> {
132-
const Team = mongoose.model('Member');
129+
const Team = mongoose.model("Member");
133130
const team = await Team.findOne(org ? { org } : {}).sort({ updatedAt: -1 });
134131
return team?.updatedAt || new Date(0);
135132
}
136133

137134
async getMemberByLogin(login: string) {
138-
const Member = mongoose.model('Member');
135+
const Member = mongoose.model("Member");
139136
return await Member.findOne({ login })
140-
.select('login name url avatar_url')
137+
.select("login name url avatar_url")
141138
.exec();
142139
}
143140

144141
async getAllMembers(org?: string) {
145-
const Member = mongoose.model('Member');
142+
const Member = mongoose.model("Member");
146143
try {
147144
return await Member.find({
148-
...org ? { org } : {}
145+
...(org ? { org } : {}),
149146
})
150-
.select('login org name url avatar_url')
147+
.select("login org name url avatar_url")
151148
.populate({
152-
path: 'seat',
153-
select: '-_id -__v',
154-
options: { lean: true }
149+
path: "seat",
150+
select: "-_id -__v",
151+
options: { lean: true },
155152
})
156-
.sort({ login: 'asc' })
153+
.sort({ login: "asc" })
157154
.exec();
158155
} catch (error) {
159-
logger.error('Failed to get all members:', error);
156+
logger.error("Failed to get all members:", error);
160157
throw error;
161158
}
162159
}
163160

164161
async getTeams(org?: string) {
165-
const Team = mongoose.model('Team');
166-
const Member = mongoose.model('Member');
162+
const Team = mongoose.model("Team");
163+
const Member = mongoose.model("Member");
167164
return await Team.find({
168-
...org ? { org } : {}
165+
...(org ? { org } : {}),
169166
})
170167
.populate({
171-
path: 'members',
172-
select: 'login avatar_url',
173-
model: Member
168+
path: "members",
169+
select: "login avatar_url",
170+
model: Member,
174171
})
175172
.populate({
176-
path: 'children',
177-
select: 'name org slug description html_url',
173+
path: "children",
174+
select: "name org slug description html_url",
178175
populate: {
179-
path: 'members',
180-
select: 'login avatar_url',
181-
model: Member
182-
}
176+
path: "members",
177+
select: "login avatar_url",
178+
model: Member,
179+
},
183180
})
184-
.sort({ name: 'asc', 'members.login': 'asc' })
181+
.sort({ name: "asc", "members.login": "asc" })
185182
.exec();
186183
}
187184
}

0 commit comments

Comments
 (0)