diff --git a/src/api/routes/teams.ts b/src/api/routes/teams.ts
index 26570165..1328f661 100644
--- a/src/api/routes/teams.ts
+++ b/src/api/routes/teams.ts
@@ -1,29 +1,99 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
-
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
-
+
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
+import {
+ Team,
+ TeamCreateSchema,
+ TeamMember,
+ TeamMemberRole,
+ TeamMemberState,
+ User,
+} from "@spacebar/util";
+import { HTTPError } from "lambert-server";
const router: Router = Router();
-router.get("/", route({}), async (req: Request, res: Response) => {
- //TODO
- res.send([]);
-});
+router.get(
+ "/",
+ route({
+ query: {
+ include_payout_account_status: {
+ type: "boolean",
+ description:
+ "Whether to include team payout account status in the response (default false)",
+ },
+ },
+ responses: {
+ 200: {
+ body: "TeamListResponse",
+ },
+ },
+ }),
+ async (req: Request, res: Response) => {
+ const teams = await Team.find({
+ where: {
+ owner_user_id: req.user_id,
+ },
+ relations: ["members"],
+ });
+
+ res.send(teams);
+ },
+);
+
+router.post(
+ "/",
+ route({
+ requestBody: "TeamCreateSchema",
+ responses: {
+ 200: {
+ body: "Team",
+ },
+ },
+ }),
+ async (req: Request, res: Response) => {
+ const user = await User.findOneOrFail({
+ where: [{ id: req.user_id }],
+ select: ["mfa_enabled"],
+ });
+ if (!user.mfa_enabled)
+ throw new HTTPError("You must enable MFA to create a team");
+
+ const body = req.body as TeamCreateSchema;
+
+ const team = Team.create({
+ name: body.name,
+ owner_user_id: req.user_id,
+ });
+ await team.save();
+
+ await TeamMember.create({
+ user_id: req.user_id,
+ team_id: team.id,
+ membership_state: TeamMemberState.ACCEPTED,
+ permissions: ["*"],
+ role: TeamMemberRole.ADMIN,
+ }).save();
+
+ res.json(team);
+ },
+);
export default router;
|