Query Builder, more specifically an orWhere, is being difficult... hard to test the friendships flow in the frontend without it, still have a good bit of work as a result
This commit is contained in:
@@ -82,6 +82,19 @@ export class FriendshipController {
|
|||||||
return this.friendshipService.acceptFriendship(relationshipId, user);
|
return this.friendshipService.acceptFriendship(relationshipId, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TEST !!!!!!!!!!
|
||||||
|
@Get('myfriends/:relationshipId/test')
|
||||||
|
@UseGuards(AuthenticateGuard)
|
||||||
|
@UseGuards(TwoFactorGuard)
|
||||||
|
test(@Param('relationshipId') relationshipId: string, @Req() req)
|
||||||
|
{
|
||||||
|
const user : User = req.user;
|
||||||
|
console.log('testing a friendship MMMMMMMMMMMMMMMMM')
|
||||||
|
return this.friendshipService.testFriendship(relationshipId, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Patch('myfriends/:relationshipId/decline')
|
@Patch('myfriends/:relationshipId/decline')
|
||||||
@UseGuards(AuthenticateGuard)
|
@UseGuards(AuthenticateGuard)
|
||||||
@UseGuards(TwoFactorGuard)
|
@UseGuards(TwoFactorGuard)
|
||||||
|
|||||||
@@ -29,26 +29,30 @@ export class FriendshipService {
|
|||||||
.where(
|
.where(
|
||||||
new Brackets((qb) => {
|
new Brackets((qb) => {
|
||||||
qb.where(
|
qb.where(
|
||||||
new Brackets((subQb) => {
|
new Brackets((subAQb) => {
|
||||||
subQb.where('friendship.senderUsername = :username', {username : username})
|
subAQb.where('friendship.senderUsername = :username', {username : username})
|
||||||
.andWhere('friendship.receiverUsername = :friendUsername', {friendUsername : friendUsername})
|
.andWhere('friendship.receiverUsername = :friendUsername', {friendUsername : friendUsername})
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
.orWhere(
|
.orWhere(
|
||||||
new Brackets((subQb) => {
|
new Brackets((subBQb) => {
|
||||||
subQb.where('friendship.senderUsername = :friendUsername', {friendUsername : friendUsername})
|
subBQb.where('friendship.senderUsername = :friendUsername', {friendUsername : friendUsername})
|
||||||
.andWhere('friendship.receiverUsername = :username', {username : username})
|
.andWhere('friendship.receiverUsername = :username', {username : username})
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.andWhere(
|
.andWhere(
|
||||||
new Brackets((qb) => {
|
new Brackets((qb2) => {
|
||||||
qb.where('friendship.status = :status', {status : FriendshipStatus.ACCEPTED})
|
qb2.where('friendship.status = :status', {status : FriendshipStatus.ACCEPTED})
|
||||||
.orWhere('friendship.status = :status', {status : FriendshipStatus.REQUESTED})
|
// .orWhere('friendship.status = :status', {status : FriendshipStatus.REQUESTED})
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.getOne()
|
.getOne()
|
||||||
|
|
||||||
|
console.log('Find one friend by username: ')
|
||||||
|
console.log({...friendship})
|
||||||
|
|
||||||
if (!friendship) {
|
if (!friendship) {
|
||||||
throw new HttpException(`There is no such friendship`, HttpStatus.NOT_FOUND);
|
throw new HttpException(`There is no such friendship`, HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
@@ -166,13 +170,101 @@ export class FriendshipService {
|
|||||||
return partialFriendship;
|
return partialFriendship;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
'0': Friendship {
|
||||||
|
id: 1,
|
||||||
|
date: 2022-12-15T03:00:05.134Z,
|
||||||
|
senderUsername: 'chbadad',
|
||||||
|
receiverUsername: 'erlazo',
|
||||||
|
status: 'R',
|
||||||
|
sender: User {
|
||||||
|
id: 2,
|
||||||
|
fortyTwoId: '84193',
|
||||||
|
username: 'chbadad',
|
||||||
|
email: 'chbadad@student.42.fr',
|
||||||
|
image_url: 'default.png',
|
||||||
|
phone: null,
|
||||||
|
status: 'connected',
|
||||||
|
isEnabledTwoFactorAuth: false,
|
||||||
|
isTwoFactorAuthenticated: false,
|
||||||
|
secretTwoFactorAuth: null
|
||||||
|
},
|
||||||
|
receiver: User {
|
||||||
|
id: 1,
|
||||||
|
fortyTwoId: '40588',
|
||||||
|
username: 'erlazo',
|
||||||
|
email: 'erlazo@student.42.fr',
|
||||||
|
image_url: 'default.png',
|
||||||
|
phone: null,
|
||||||
|
status: 'connected',
|
||||||
|
isEnabledTwoFactorAuth: false,
|
||||||
|
isTwoFactorAuthenticated: false,
|
||||||
|
secretTwoFactorAuth: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VS ------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
id: 1,
|
||||||
|
date: 2022-12-15T03:00:05.134Z,
|
||||||
|
senderUsername: 'chbadad',
|
||||||
|
receiverUsername: 'erlazo',
|
||||||
|
status: 'R',
|
||||||
|
sender: User {
|
||||||
|
id: 2,
|
||||||
|
fortyTwoId: '84193',
|
||||||
|
username: 'chbadad',
|
||||||
|
email: 'chbadad@student.42.fr',
|
||||||
|
image_url: 'default.png',
|
||||||
|
phone: null,
|
||||||
|
status: 'connected',
|
||||||
|
isEnabledTwoFactorAuth: false,
|
||||||
|
isTwoFactorAuthenticated: false,
|
||||||
|
secretTwoFactorAuth: null
|
||||||
|
},
|
||||||
|
receiver: User {
|
||||||
|
id: 1,
|
||||||
|
fortyTwoId: '40588',
|
||||||
|
username: 'erlazo',
|
||||||
|
email: 'erlazo@student.42.fr',
|
||||||
|
image_url: 'default.png',
|
||||||
|
phone: null,
|
||||||
|
status: 'connected',
|
||||||
|
isEnabledTwoFactorAuth: false,
|
||||||
|
isTwoFactorAuthenticated: false,
|
||||||
|
secretTwoFactorAuth: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TEST !!!!!!!!!
|
||||||
|
async testFriendship(relationshipId: string, user: User) {
|
||||||
|
const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} );
|
||||||
|
// const relation = await this.friendshipRepository.find({take: 1, where: {id: +relationshipId }, relations: ['sender', 'receiver']} );
|
||||||
|
// const relation = await this.friendshipRepository.find({select: {0: Friendship}, where: {id: +relationshipId }, relations: ['sender', 'receiver']} );
|
||||||
|
// const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']});
|
||||||
|
|
||||||
|
console.log('.service test friendship')
|
||||||
|
console.log({...relation})
|
||||||
|
if (relation[0].sender.id) {
|
||||||
|
console.log('it worked!')
|
||||||
|
}
|
||||||
|
if (!relation) {
|
||||||
|
throw new HttpException(`Found NOTHING.`, HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
return relation;
|
||||||
|
}
|
||||||
|
|
||||||
async acceptFriendship(relationshipId: string, user: User) {
|
async acceptFriendship(relationshipId: string, user: User) {
|
||||||
// const relation = await this.friendshipRepository.findOneBy({ id: +relationshipId });
|
// const relation = await this.friendshipRepository.findOneBy({ id: +relationshipId });
|
||||||
// ok gotta swap out hte findOneBy for a find, recall what you did in the Nest.js tutorial
|
// ok gotta swap out hte findOneBy for a find, recall what you did in the Nest.js tutorial
|
||||||
// const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} );
|
// this is what i want ideally...
|
||||||
// const relation = await this.friendshipRepository.find({where: {id: +relationshipId } });
|
const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} );
|
||||||
// const relation = await this.friendshipRepository.findOneBy({where: {id: +relationshipId }, relations: ['sender', 'receiver']});
|
// const relation = await this.friendshipRepository.findOneBy({where: {id: +relationshipId }, relations: ['sender', 'receiver']});
|
||||||
const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']});
|
// const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']});
|
||||||
|
|
||||||
console.log('.service accept friendship')
|
console.log('.service accept friendship')
|
||||||
console.log({...relation})
|
console.log({...relation})
|
||||||
@@ -181,11 +273,13 @@ export class FriendshipService {
|
|||||||
// console.log(relation.sender)
|
// console.log(relation.sender)
|
||||||
// ok so you can't query sender cuz it's not a column in the entity, not sure how you access it then...
|
// ok so you can't query sender cuz it's not a column in the entity, not sure how you access it then...
|
||||||
// if (relation.sender.id === user.id) {
|
// if (relation.sender.id === user.id) {
|
||||||
if (relation.sender.id === user.id) {
|
if (relation[0].sender.id === user.id) {
|
||||||
throw new HttpException(`You can't accept your own request.`, HttpStatus.NOT_FOUND);
|
throw new HttpException(`You can't accept your own request.`, HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
relation.status = FriendshipStatus.ACCEPTED;
|
relation[0].status = FriendshipStatus.ACCEPTED;
|
||||||
const savedFriendship = this.friendshipRepository.save(relation);
|
// are we sure saving relation[0] won't fuck things up? cuz aren't there 2 User in there?
|
||||||
|
// should i partial friendship intermediary first?
|
||||||
|
const savedFriendship = this.friendshipRepository.save(relation[0]);
|
||||||
const partialFriendship : Partial<Friendship> = {
|
const partialFriendship : Partial<Friendship> = {
|
||||||
id : (await savedFriendship).id,
|
id : (await savedFriendship).id,
|
||||||
date : (await savedFriendship).date,
|
date : (await savedFriendship).date,
|
||||||
|
|||||||
@@ -69,6 +69,22 @@
|
|||||||
console.log({...requestsRecieved})
|
console.log({...requestsRecieved})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let cherifFetch;
|
||||||
|
const fetchCherif = async() => {
|
||||||
|
cherifFetch = await fetch('http://transcendance:8080/api/v2/network/myfriends/chbadad')
|
||||||
|
.then( x => x.json() );
|
||||||
|
console.log('Cherif Fetched ')
|
||||||
|
console.log({...cherifFetch})
|
||||||
|
};
|
||||||
|
|
||||||
|
let ericFetch;
|
||||||
|
const fetchEric = async() => {
|
||||||
|
ericFetch = await fetch('http://transcendance:8080/api/v2/network/myfriends/erlazo')
|
||||||
|
.then( x => x.json() );
|
||||||
|
console.log('Eric Fetched ')
|
||||||
|
console.log({...ericFetch})
|
||||||
|
};
|
||||||
|
|
||||||
let sentFriendRequest;
|
let sentFriendRequest;
|
||||||
const sendFriendRequest = async(potentialFriendUsername) => {
|
const sendFriendRequest = async(potentialFriendUsername) => {
|
||||||
set.friendUsername = '';
|
set.friendUsername = '';
|
||||||
@@ -92,6 +108,7 @@
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
.then( x => x.json())
|
.then( x => x.json())
|
||||||
|
areWeFriends(usernameBeingViewed);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -100,6 +117,7 @@
|
|||||||
friendshipStatusFull = undefined;
|
friendshipStatusFull = undefined;
|
||||||
friendshipStatusFull = await fetch(`http://transcendance:8080/api/v2/network/myfriends/${aUsername}`)
|
friendshipStatusFull = await fetch(`http://transcendance:8080/api/v2/network/myfriends/${aUsername}`)
|
||||||
.then( x => x.json());
|
.then( x => x.json());
|
||||||
|
console.log({...friendshipStatusFull})
|
||||||
};
|
};
|
||||||
|
|
||||||
const viewAUser = async(aUsername) => {
|
const viewAUser = async(aUsername) => {
|
||||||
@@ -116,6 +134,16 @@
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let tmpTest;
|
||||||
|
const testBack = async(relationshipId) => {
|
||||||
|
console.log('test back request')
|
||||||
|
tmpTest = undefined;
|
||||||
|
// PATCH http://transcendance:8080/api/v2/network/myfriends/:relationshipId/test
|
||||||
|
tmpTest = await fetch(`http://transcendance:8080/api/v2/network/myfriends/${relationshipId}/test`)
|
||||||
|
.then( x => x.json());
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const acceptFriendRequest = async(relationshipId) => {
|
const acceptFriendRequest = async(relationshipId) => {
|
||||||
console.log('accept friend request')
|
console.log('accept friend request')
|
||||||
friendshipFetch = undefined;
|
friendshipFetch = undefined;
|
||||||
@@ -124,6 +152,8 @@
|
|||||||
method: "PATCH"})
|
method: "PATCH"})
|
||||||
.then( x => x.json());
|
.then( x => x.json());
|
||||||
// maybe not the most robust things, not super reusable cuz it depends on outside vars but works for now...
|
// maybe not the most robust things, not super reusable cuz it depends on outside vars but works for now...
|
||||||
|
console.log('accepted friend request, now response')
|
||||||
|
console.log({...friendshipFetch})
|
||||||
await areWeFriends(usernameBeingViewed);
|
await areWeFriends(usernameBeingViewed);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -266,7 +296,9 @@
|
|||||||
{/if} -->
|
{/if} -->
|
||||||
<!-- {:else if userBeingViewed !== undefined} -->
|
<!-- {:else if userBeingViewed !== undefined} -->
|
||||||
|
|
||||||
<!-- <Button on:click={fetchAFriend}>Get Cherif</Button> -->
|
<Button on:click={() => testBack(1)}>Test Friendship Back</Button>
|
||||||
|
<Button on:click={fetchCherif}>Fetch Cherif</Button>
|
||||||
|
<Button on:click={fetchEric}>Fetch Eric</Button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user