Skip to content
This repository has been archived by the owner on Mar 23, 2024. It is now read-only.

Commit

Permalink
Merge pull request #37 from exortme1ster/hotfix/get-teams-requests
Browse files Browse the repository at this point in the history
hotfix: get teams and get filtered teams requests
  • Loading branch information
nmashchenko committed May 3, 2023
2 parents 457125b + 497be81 commit 53de080
Show file tree
Hide file tree
Showing 10 changed files with 342 additions and 66 deletions.
2 changes: 1 addition & 1 deletion client/src/api/endpoints/team.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const createTeam = async (teamName, teamCountry, teamMembers) => {

const getAllTeams = async () => {
try {
const data = await api.get('/teams/get-teams')
const data = await api.get('/teams')

return data
} catch (err) {
Expand Down
2 changes: 1 addition & 1 deletion client/src/api/hooks/team/useGetTeamData.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const { api } = http

export const useGetTeamData = (teamId) => {
const getTeamById = async () => {
const response = await api.get(`/teams/get-team/${teamId}`)
const response = await api.get(`/teams/${teamId}`)

return response.data
}
Expand Down
2 changes: 1 addition & 1 deletion client/src/api/hooks/temeights/useLoadUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const useLoadUsers = (isFiltered) => {
return response.data
}
const getUsersFiltered = async ({ pageParam = 1 }) => {
const filtersQuery = filteredQueryMaker(
const filtersQuery = filteredQueryMaker.users(
filters.countries,
filters.roles,
filters.languages,
Expand Down
2 changes: 1 addition & 1 deletion client/src/components/Forms/TeamsList/TeamsList.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ function TeamsList() {
People
</Text>
</ColumnNames>
{teams.map((team, i) => (
{teams?.data?.map((team, i) => (
<TeamData margin="60px" key={i}>
<TeamImage src="https://pbs.twimg.com/profile_images/1406293979323371528/TJ7BseVI_400x400.jpg" />
<Text fontSize="18px" color="white">
Expand Down
24 changes: 22 additions & 2 deletions client/src/utils/filteredQueryMaker.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const filteredQueryMaker = (countries, roles, programmingLanguages, frameworks) => {
const users = (countries, roles, programmingLanguages, frameworks) => {
const querySearch = {
isRegistered: true,
country: countries?.length ? { $in: countries } : null,
country: countries.length ? { $in: countries } : null,
concentration: roles?.length ? { $in: roles } : null,
programmingLanguages: programmingLanguages?.length ? { $in: programmingLanguages } : null,
frameworks: frameworks?.length ? { $in: frameworks } : null,
Expand All @@ -13,4 +13,24 @@ const filteredQueryMaker = (countries, roles, programmingLanguages, frameworks)
return querySearchWithOutBlankFields
}

const teams = (countries, members, teamname, tag) => {
const querySearch = {
country: countries.length ? { $in: countries } : null,
name: teamname ? { $regex: teamname, $options: 'i' } : null,
tag: tag ? { $regex: tag, $options: 'i' } : null,
members: members ? members : null,
}

const querySearchWithOutBlankFields = Object.fromEntries(
Object.entries(querySearch).filter(([_, v]) => v != null),
)

return querySearchWithOutBlankFields
}

const filteredQueryMaker = Object.freeze({
users,
teams,
})

export default filteredQueryMaker
2 changes: 1 addition & 1 deletion server/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ module.exports = {
"parser": "flow"
}
]
};
};
22 changes: 22 additions & 0 deletions server/src/teams/dto/results.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ApiProperty } from '@nestjs/swagger';
import { Team } from '../teams.schema';

export class Results {
@ApiProperty({
description: 'Array of teams that we get on this page',
})
data: Array<Team>;
@ApiProperty({
example: '100',
description: 'Total number of teams we found based on filters (if any)',
})
total: number;
@ApiProperty({ example: '2', description: 'Current page' })
page: number;
@ApiProperty({ example: '9', description: 'Limit which is always 9' })
limit: number;
@ApiProperty({ example: '5', description: 'Teams on current page' })
on_current_page: number;
@ApiProperty({ example: '12', description: 'Last page that has teams' })
last_page: number;
}
90 changes: 60 additions & 30 deletions server/src/teams/teams.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ import {
Put,
UseGuards,
UsePipes,
Query,
} from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { ApiOperation, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger';
import { TeamsService } from './teams.service';
import { CreateTeamDto } from './dto/create-team.dto';
import mongoose from 'mongoose';
Expand All @@ -23,6 +24,8 @@ import { UpdateTeamDto } from './dto/update-team.dto';
import { InviteToTeamResponseDto } from './dto/invite-to-team.response.dto';
import { TeamSearchDto } from './dto/team-search.dto';
import { TransferLeaderDto } from './dto/transfer-leader.dto';
import { Results } from './dto/results.dto';
import * as qs from 'qs';

@ApiTags('Teams')
@Controller('/teams')
Expand All @@ -40,6 +43,62 @@ export class TeamsController {
return this.teamsService.createTeam(dto);
}

@ApiOperation({ summary: 'Get teams by page' })
@ApiResponse({ status: 200, type: Results })
@ApiQuery({
name: 'page',
description: 'The page number to get',
required: false,
type: Number,
})
@Get()
getTeamsByPage(@Query('page') pageNumber?: number) {
/* A way to check if the pageNumber is a number or not. If it is not a number, it will return 1. */
const page: number = parseInt(pageNumber as any) || 1;
const limit: number = 9;
return this.teamsService.getTeamsByPage(page, limit);
}

@ApiOperation({ summary: 'Get filtered teams by page' })
@ApiResponse({ status: 200, type: Results })
@ApiQuery({
name: 'page',
description: 'The page number to get',
required: false,
type: Number,
})
@ApiQuery({
name: 'filtersQuery',
description: `The filters that we get front end, don't forget to use let queryString = qs.stringify(filtersQuery) before sending to backend. If you pass members inside filters, make sure it's either [number] OR [number, number]`,
required: true,
type: String,
})
@Get('/filtered')
getFilteredTeamsByPage(
@Query('filtersQuery') filtersQuery: string,
@Query('page') pageNumber?: number,
) {
const page: number = parseInt(pageNumber as any) || 1;
const limit: number = 9;
/* Parsing the query string into an object. */
const parsedQuery = qs.parse(filtersQuery);

return this.teamsService.getFilteredTeamsByPage(
page,
limit,
parsedQuery,
);
}

@ApiOperation({
summary: 'Get team by id',
})
@ApiResponse({ status: 200, type: Team })
@Get('/:id')
getTeam(@Param('id') id: mongoose.Types.ObjectId) {
return this.teamsService.getTeamById(id);
}

@UseGuards(JwtAuthGuard)
@UsePipes(ValidationPipe)
@ApiOperation({
Expand Down Expand Up @@ -73,24 +132,6 @@ export class TeamsController {
return this.teamsService.removeMember(dto);
}

@ApiOperation({
summary: 'Get team by id',
})
@ApiResponse({ status: 200, type: Team })
@Get('/get-team/:id')
getTeam(@Param('id') id: mongoose.Types.ObjectId) {
return this.teamsService.getTeamById(id);
}

@ApiOperation({
summary: 'Get all teams',
})
@ApiResponse({ status: 200, type: [Team] })
@Get('/get-teams')
getAllTeams() {
return this.teamsService.getAllTeams();
}

@UseGuards(JwtAuthGuard)
@UsePipes(ValidationPipe)
@ApiOperation({
Expand Down Expand Up @@ -158,17 +199,6 @@ export class TeamsController {
return this.teamsService.deleteTeam(teamId);
}

@UseGuards(JwtAuthGuard)
@UsePipes(ValidationPipe)
@ApiOperation({
summary: 'Search for the team',
})
@ApiResponse({ status: 200, type: [Team] })
@Post('/search')
findTeam(@Body() dto: TeamSearchDto) {
return this.teamsService.findTeam(dto);
}

@UseGuards(JwtAuthGuard)
@UsePipes(ValidationPipe)
@ApiOperation({
Expand Down
Loading

0 comments on commit 53de080

Please sign in to comment.