basic verification of team member in team

This commit is contained in:
Arjun Patel
2022-01-14 12:58:35 -08:00
parent 00d256b43b
commit 99694fabb9
4 changed files with 126 additions and 8 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
export default function BackgroundLayout({ children }) {
return (
<div id="bg">
<div id="bg" className="text-white w-screen h-screen">
{children}
</div>
)
+79 -3
View File
@@ -1,12 +1,88 @@
import { GetServerSidePropsContext, GetServerSidePropsResult } from 'next'
import { useRouter } from 'next/router'
import { useEffect, useState } from 'react'
import BackgroundLayout from '../../components/Layouts/BackgroundLayout'
import { useAuth } from '../../contexts/authContext'
import { Team } from '../../models/team'
import { TeamMemberStatus } from '../../models/teamMember'
import TeamService from '../../services/teamService'
export default function Team() {
const teamService = new TeamService()
export default function TeamDashboard() {
const { currUser } = useAuth()
const router = useRouter()
const { teamid } = router.query
// check if the team is a valid team route and show the dashboard for the team
const [loading, setLoading] = useState<Boolean>(true)
const [team, setTeam] = useState<Team>(null)
useEffect(() => {
(async function() {
try {
// if not authenticated, take user to the login
if (!currUser) {
console.log('not authenticated...routing from dashboard to teams home')
router.push('/teams/login')
return
}
// check if the team is a valid team and that user is in it
if (typeof teamid === "string") {
const returnedTeam = await teamService.getTeam(teamid)
const returnedTeamMember = await teamService.getTeamMember(teamid, currUser.uid)
console.log(returnedTeam)
console.log(returnedTeamMember)
// if there is no such team OR
// if you are not a member of this team, then get out of here
if (!returnedTeam || !returnedTeamMember || returnedTeamMember.status == TeamMemberStatus.deleted) {
console.log('no team exists, or am not activated in it')
// router.push('/teams')
return
}
// if I am new to the team but I was invited, and this is my first time, then activate me into the team
// and proceed with showing the dashboard stuff
} else {
console.log('not a proper query with teamid')
router.push('/teams')
return
}
} catch(error) {
console.log(error)
router.push('/teams/login')
}
setLoading(false)
})();
}, [])
if (loading) {
return (
<div>loading</div>
)
}
return (
<span>the team is {teamid}</span>
<BackgroundLayout>
the team is {teamid}
</BackgroundLayout>
)
}
export async function getServerSideProps(context: GetServerSidePropsContext) {
// basic check if this team exists
// todo check if authenticated
// todo check if this user is in this team
return {
props: {},
}
}
+3 -3
View File
@@ -22,7 +22,7 @@ export default function CreateTeam() {
// if not authenticated, take user to the login
if (!currUser) {
console.log('not authenticated...routing from dashboard to teams home')
// router.push('/teams/login')
router.push('/teams/login')
}
// todo if user is in a team already, notify them to make sure
@@ -32,9 +32,9 @@ export default function CreateTeam() {
console.log(error)
router.push('/teams/login')
}
})();
setLoading(false)
setLoading(false)
})();
}, [])
async function handleSubmit(e) {
+43 -1
View File
@@ -1,4 +1,4 @@
import { addDoc, collection, doc, DocumentReference, Firestore, getFirestore, serverTimestamp } from 'firebase/firestore'
import { addDoc, collection, doc, DocumentReference, Firestore, getDoc, getDocs, getFirestore, orderBy, query, serverTimestamp, where } from 'firebase/firestore'
import { Team } from '../models/team'
import { TeamMember, TeamMemberRole, TeamMemberStatus } from '../models/teamMember'
import { Collections } from './collections'
@@ -30,4 +30,46 @@ export default class TeamService implements IService {
return teamDocRef.id
}
async getTeam(teamId: string): Promise<Team | null> {
const docRef = doc(this.db, Collections.teams, teamId);
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log('got team data')
let team: Team = docSnap.data() as Team
return team
} else {
// doc.data() will be undefined in this case
console.log("team not found!");
return null
}
}
async getTeamMember(teamId: string, userId: string): Promise<TeamMember | null> {
const q = query(
collection(this.db, Collections.teamMembers),
where("teamId", "==", teamId),
where("userId", "==", userId)
)
const querySnapshot = await getDocs(q);
if (querySnapshot.size > 1) {
console.log('there are multiple teammembers for this user...error in teamservice')
}
console.log(querySnapshot)
var teamMember: TeamMember | null = null
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
// get the first one and just return...shouldn't be more
console.log('got teammember data')
teamMember = doc.data() as TeamMember
});
return teamMember
}
}