adding logic for activating user
This commit is contained in:
+35
-14
@@ -27,29 +27,50 @@ export default function TeamDashboard() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof teamid !== "string") {
|
||||||
|
console.log('not a proper query with teamid')
|
||||||
|
router.push('/teams')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// check if the team is a valid team and that user is in it
|
// 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 returnedTeam = await teamService.getTeam(teamid)
|
if (!returnedTeam) {
|
||||||
const returnedTeamMember = await teamService.getTeamMember(teamid, currUser.uid)
|
console.log('team doesnt exist')
|
||||||
|
router.push('/teams')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
console.log(returnedTeam)
|
const returnedTeamMember = await teamService.getTeamMemberByUserId(teamid, currUser.uid)
|
||||||
console.log(returnedTeamMember)
|
|
||||||
|
|
||||||
// if there is no such team OR
|
console.log(returnedTeam)
|
||||||
// if you are not a member of this team, then get out of here
|
console.log(returnedTeamMember)
|
||||||
if (!returnedTeam || !returnedTeamMember || returnedTeamMember.status == TeamMemberStatus.deleted) {
|
|
||||||
console.log('no team exists, or am not activated in it')
|
// if you are not a member of this team, then get out of here
|
||||||
// router.push('/teams')
|
// but have to check through email invite and userid
|
||||||
|
if (returnedTeamMember && returnedTeamMember.status == TeamMemberStatus.deleted) {
|
||||||
|
console.log('user was deleted from team')
|
||||||
|
router.push('/teams')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there is no team member through user id,
|
||||||
|
// give him last chance and see if he was invited
|
||||||
|
if (!returnedTeamMember) {
|
||||||
|
const invitedTeamMember = await teamService.getTeamMemberByEmailInvite(teamid, currUser.email)
|
||||||
|
|
||||||
|
if (!invitedTeamMember) {
|
||||||
|
console.log('not invited to team either')
|
||||||
|
router.push('/teams')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// if I am new to the team but I was invited, and this is my first time, then activate me into the team
|
// 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
|
// and proceed with showing the dashboard stuff
|
||||||
|
|
||||||
} else {
|
invitedTeamMember.status = TeamMemberStatus.activated
|
||||||
console.log('not a proper query with teamid')
|
invitedTeamMember.userId = currUser.uid
|
||||||
router.push('/teams')
|
await teamService.updateTeamMember(invitedTeamMember)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { addDoc, collection, doc, DocumentReference, Firestore, getDoc, getDocs, getFirestore, orderBy, query, serverTimestamp, where } from 'firebase/firestore'
|
import { addDoc, collection, doc, DocumentReference, Firestore, getDoc, getDocs, getFirestore, orderBy, query, serverTimestamp, setDoc, where } from 'firebase/firestore'
|
||||||
import { Team } from '../models/team'
|
import { Team } from '../models/team'
|
||||||
import { TeamMember, TeamMemberRole, TeamMemberStatus } from '../models/teamMember'
|
import { TeamMember, TeamMemberRole, TeamMemberStatus } from '../models/teamMember'
|
||||||
import { Collections } from './collections'
|
import { Collections } from './collections'
|
||||||
@@ -38,6 +38,7 @@ export default class TeamService implements IService {
|
|||||||
if (docSnap.exists()) {
|
if (docSnap.exists()) {
|
||||||
console.log('got team data')
|
console.log('got team data')
|
||||||
let team: Team = docSnap.data() as Team
|
let team: Team = docSnap.data() as Team
|
||||||
|
team.id = docSnap.id
|
||||||
return team
|
return team
|
||||||
} else {
|
} else {
|
||||||
// doc.data() will be undefined in this case
|
// doc.data() will be undefined in this case
|
||||||
@@ -47,7 +48,7 @@ export default class TeamService implements IService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTeamMember(teamId: string, userId: string): Promise<TeamMember | null> {
|
async getTeamMemberByUserId(teamId: string, userId: string): Promise<TeamMember | null> {
|
||||||
const q = query(
|
const q = query(
|
||||||
collection(this.db, Collections.teamMembers),
|
collection(this.db, Collections.teamMembers),
|
||||||
where("teamId", "==", teamId),
|
where("teamId", "==", teamId),
|
||||||
@@ -68,8 +69,43 @@ export default class TeamService implements IService {
|
|||||||
// get the first one and just return...shouldn't be more
|
// get the first one and just return...shouldn't be more
|
||||||
console.log('got teammember data')
|
console.log('got teammember data')
|
||||||
teamMember = doc.data() as TeamMember
|
teamMember = doc.data() as TeamMember
|
||||||
|
|
||||||
|
teamMember.id = doc.id
|
||||||
});
|
});
|
||||||
|
|
||||||
return teamMember
|
return teamMember
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getTeamMemberByEmailInvite(teamId: string, emailAddress: string): Promise<TeamMember | null> {
|
||||||
|
const q = query(
|
||||||
|
collection(this.db, Collections.teamMembers),
|
||||||
|
where("teamId", "==", teamId),
|
||||||
|
where("inviteEmailAddress", "==", emailAddress)
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
teamMember.id = doc.id
|
||||||
|
});
|
||||||
|
|
||||||
|
return teamMember
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateTeamMember(teamMember: TeamMember) {
|
||||||
|
const docRef = doc(this.db, Collections.teamMembers, teamMember.id);
|
||||||
|
await setDoc(docRef, { ...teamMember, lastUpdatedDate: serverTimestamp() }, { merge: true })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user