limit team members to 4 and display member count in list
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
name,tag,description
|
||||
Team Alpha,ALPH,A competitive esports team
|
||||
Team Beta,BETA,New challengers on the scene
|
||||
Team Gamma,GAMM,Veteran tournament winners
|
||||
Team Delta,DELT,Rising stars in the community
|
||||
Team Epsilon,EPSI,Strategic gameplay specialists
|
||||
Team Zeta,ZETA,Fast-paced aggressive players
|
||||
Team Alpha,ALP,A competitive esports team
|
||||
Team Beta,BET,New challengers on the scene
|
||||
Team Gamma,GAM,Veteran tournament winners
|
||||
Team Delta,DEL,Rising stars in the community
|
||||
Team Epsilon,EPS,Strategic gameplay specialists
|
||||
Team Zeta,ZET,Fast-paced aggressive players
|
||||
|
||||
|
@@ -48,10 +48,16 @@ export class TeamService {
|
||||
|
||||
getAllTeams(): Promise<Team[]> {
|
||||
return new Promise<Team[]>((resolve, reject) => {
|
||||
this.db.all(`SELECT * FROM Teams`, (err: Error | null, rows: Team[]) => {
|
||||
if (err) return reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
this.db.all(
|
||||
`SELECT t.*, COUNT(tm.id) as memberCount
|
||||
FROM Teams t
|
||||
LEFT JOIN TeamMembers tm ON t.id = tm.teamId
|
||||
GROUP BY t.id`,
|
||||
(err: Error | null, rows: Team[]) => {
|
||||
if (err) return reject(err);
|
||||
resolve(rows);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -165,18 +171,30 @@ export class TeamService {
|
||||
|
||||
addTeamMember(teamId: number, userId: number, role: 'owner' | 'member' = 'member'): Promise<TeamMember> {
|
||||
return new Promise<TeamMember>((resolve, reject) => {
|
||||
const stmt = this.db.prepare(`INSERT INTO TeamMembers (teamId, userId, role) VALUES (?, ?, ?)`);
|
||||
stmt.run(teamId, userId, role, function (this: RunResult, err: Error | null) {
|
||||
if (err) return reject(err);
|
||||
resolve({
|
||||
id: (this as any).lastID,
|
||||
teamId,
|
||||
userId,
|
||||
role,
|
||||
joinedAt: new Date().toISOString(),
|
||||
});
|
||||
});
|
||||
stmt.finalize();
|
||||
// First check if team already has 4 members
|
||||
this.db.get(
|
||||
`SELECT COUNT(*) as count FROM TeamMembers WHERE teamId = ?`,
|
||||
[teamId],
|
||||
(err: Error | null, row: any) => {
|
||||
if (err) return reject(err);
|
||||
if (row.count >= 4) {
|
||||
return reject(new Error('Team already has maximum of 4 members'));
|
||||
}
|
||||
|
||||
const stmt = this.db.prepare(`INSERT INTO TeamMembers (teamId, userId, role) VALUES (?, ?, ?)`);
|
||||
stmt.run(teamId, userId, role, function (this: RunResult, err: Error | null) {
|
||||
if (err) return reject(err);
|
||||
resolve({
|
||||
id: (this as any).lastID,
|
||||
teamId,
|
||||
userId,
|
||||
role,
|
||||
joinedAt: new Date().toISOString(),
|
||||
});
|
||||
});
|
||||
stmt.finalize();
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -19,4 +19,8 @@ Folgende Dateien wurden in diesem Prompt verändert:
|
||||
- tournament_detail_page.dart
|
||||
- teams_page.dart (erstellt, aber nicht verwendet)
|
||||
|
||||
-
|
||||
- Ensure a team can only have a maximum of four members, also show the member count in the team list.<br><br>
|
||||
Folgende Dateien wurden in diesem Prompt verändert:
|
||||
- backend_splatournament_manager/src/services/team-service.ts
|
||||
- frontend_splatournament_manager/lib/models/team.dart
|
||||
- frontend_splatournament_manager/lib/pages/teams_page.dart
|
||||
|
||||
@@ -4,6 +4,7 @@ class Team {
|
||||
final String tag;
|
||||
final String description;
|
||||
final String createdAt;
|
||||
final int? memberCount;
|
||||
|
||||
Team({
|
||||
required this.id,
|
||||
@@ -11,6 +12,7 @@ class Team {
|
||||
required this.tag,
|
||||
required this.description,
|
||||
required this.createdAt,
|
||||
this.memberCount,
|
||||
});
|
||||
|
||||
factory Team.fromJson(Map<String, dynamic> json) {
|
||||
@@ -20,6 +22,7 @@ class Team {
|
||||
tag: json['tag'] as String,
|
||||
description: (json['description'] as String?) ?? '',
|
||||
createdAt: (json['createdAt'] as String?) ?? '',
|
||||
memberCount: json['memberCount'] as int?,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -30,6 +33,7 @@ class Team {
|
||||
'tag': tag,
|
||||
'description': description,
|
||||
'createdAt': createdAt,
|
||||
if (memberCount != null) 'memberCount': memberCount,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,10 @@ class TeamListItem extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final memberCountText = team.memberCount != null
|
||||
? '${team.memberCount}/4 members'
|
||||
: 'No members';
|
||||
|
||||
return Card(
|
||||
margin: const EdgeInsets.symmetric(vertical: 8),
|
||||
child: ListTile(
|
||||
@@ -135,7 +139,21 @@ class TeamListItem extends StatelessWidget {
|
||||
child: Text(team.tag),
|
||||
),
|
||||
title: Text(team.name),
|
||||
subtitle: Text(team.description.isEmpty ? 'No description' : team.description),
|
||||
subtitle: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(team.description.isEmpty ? 'No description' : team.description),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
memberCountText,
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
isThreeLine: true,
|
||||
trailing: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
|
||||
Reference in New Issue
Block a user