@@ -67,3 +67,95 @@ INNER JOIN team_members tm ON t.id = tm.team_id
6767WHERE tm .user_id = @userid::text
6868 AND t .project_id = @projectid::text
6969LIMIT 1 ;
70+
71+ -- name: CreateTeam :one
72+ INSERT INTO teams (id, project_id, name, description, join_code)
73+ VALUES (@id::text , @projectid::text , @name::text , @description::text , @joincode::text )
74+ RETURNING id, project_id, name, description, join_code, super_team_id, created_at, updated_at;
75+
76+ -- name: UpdateTeam :one
77+ UPDATE teams
78+ SET
79+ name = COALESCE(@name::text , name),
80+ description = COALESCE(@description::text , description),
81+ updated_at = now()
82+ WHERE id = @id::text
83+ RETURNING id, project_id, name, description, join_code, super_team_id, created_at, updated_at;
84+
85+ -- name: DeleteTeam :exec
86+ DELETE FROM teams
87+ WHERE id = @id::text ;
88+
89+ -- name: GetTeamByJoinCode :one
90+ SELECT id, project_id, name, description, join_code, super_team_id, created_at, updated_at
91+ FROM teams
92+ WHERE join_code = @joincode::text ;
93+
94+ -- name: RegenerateJoinCode :one
95+ UPDATE teams
96+ SET join_code = @joincode::text , updated_at = now()
97+ WHERE id = @id::text
98+ RETURNING id, project_id, name, description, join_code, super_team_id, created_at, updated_at;
99+
100+ -- name: AddTeamMember :exec
101+ INSERT INTO team_members (team_id, user_id)
102+ VALUES (@teamid::text , @userid::text )
103+ ON CONFLICT (team_id, user_id) DO NOTHING;
104+
105+ -- name: RemoveTeamMember :exec
106+ DELETE FROM team_members
107+ WHERE team_id = @teamid::text AND user_id = @userid::text ;
108+
109+ -- name: HasTeamMemberFromChurch :one
110+ SELECT EXISTS(
111+ SELECT 1
112+ FROM team_members tm
113+ INNER JOIN users u ON tm .user_id = u .id
114+ WHERE tm .team_id = @teamid::text
115+ AND u .church_id = @churchid::text
116+ );
117+
118+ -- name: GetTeamProjectID :one
119+ SELECT project_id
120+ FROM teams
121+ WHERE id = @teamid::text ;
122+
123+ -- name: RemoveUserFromTeamsInProject :exec
124+ DELETE FROM team_members
125+ WHERE user_id = @userid::text
126+ AND team_id IN (
127+ SELECT id FROM teams WHERE project_id = @projectid::text
128+ );
129+
130+ -- name: RemoveTeamLeadRole :exec
131+ DELETE FROM user_roles
132+ WHERE user_id = @userid::text
133+ AND team_id = @teamid::text
134+ AND role = ' TEAM_LEAD' ;
135+
136+ -- name: AssignTeamLeadRole :one
137+ INSERT INTO user_roles (id, user_id, role, team_id, assigned_by, assigned_at)
138+ VALUES (@id::text , @userid::text , ' TEAM_LEAD' , @teamid::text , @assignedby::text , @assignedat::timestamptz )
139+ RETURNING id, user_id, role, church_id, project_id, team_id, assigned_by, assigned_at;
140+
141+ -- name: GetTeamLeadUserID :one
142+ SELECT user_id
143+ FROM user_roles
144+ WHERE team_id = @teamid::text
145+ AND role = ' TEAM_LEAD'
146+ LIMIT 1 ;
147+
148+ -- name: IsUserTeamMember :one
149+ SELECT EXISTS(
150+ SELECT 1
151+ FROM team_members
152+ WHERE team_id = @teamid::text
153+ AND user_id = @userid::text
154+ );
155+
156+ -- name: JoinCodeExists :one
157+ SELECT EXISTS(
158+ SELECT 1
159+ FROM teams
160+ WHERE join_code = @joincode::text
161+ );
0 commit comments