Skip to content

Commit

Permalink
new routes
Browse files Browse the repository at this point in the history
  • Loading branch information
Leouarz committed Feb 9, 2022
1 parent d74221e commit 2ceb743
Show file tree
Hide file tree
Showing 6 changed files with 371 additions and 64 deletions.
52 changes: 52 additions & 0 deletions src/api/controllers/nfts/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,58 @@ export class Controller {
next(err)
}
}

async getMostViewed(
req: Request,
res: Response,
next: NextFunction
): Promise<void> {
try {
const queryValues = validationGetFilters(req.query)
res.json(await NFTService.getMostViewed(queryValues));
} catch (err) {
next(err)
}
}

async getMostSold(
req: Request,
res: Response,
next: NextFunction
): Promise<void> {
try {
const queryValues = validationGetFilters(req.query)
res.json(await NFTService.getMostSold(queryValues));
} catch (err) {
next(err)
}
}

async getMostSoldSeries(
req: Request,
res: Response,
next: NextFunction
): Promise<void> {
try {
const queryValues = validationGetFilters(req.query)
res.json(await NFTService.getMostSoldSeries(queryValues));
} catch (err) {
next(err)
}
}

async getTopSellers(
req: Request,
res: Response,
next: NextFunction
): Promise<void> {
try {
const queryValues = validationGetFilters(req.query)
res.json(await NFTService.getTopSellers(queryValues));
} catch (err) {
next(err)
}
}
}

export default new Controller();
7 changes: 4 additions & 3 deletions src/api/controllers/nfts/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ export default express
.Router()
.get("/", controller.getNFTs)
.get("/most-liked", controller.getMostLiked)
// .get("/most-viewed", controller.getMostViewed)
// .get("/most-sold", controller.getMostSold)
// .get("/most-soldSeries", controller.getMostSoldSeries)
.get("/most-viewed", controller.getMostViewed)
.get("/most-sold", controller.getMostSold)
.get("/most-sold-series", controller.getMostSoldSeries)
.get("/top-sellers", controller.getTopSellers)
.get("/history", controller.getHistory)
.get("/total-on-sale", controller.getTotalOnSale)
.get("/:id", controller.getNFT)
Expand Down
122 changes: 105 additions & 17 deletions src/api/services/gqlQueriesBuilder.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { gql } from "graphql-request";
import { convertSortString, LIMIT_MAX_PAGINATION } from "../../utils";
import { getHistoryQuery, getSeriesStatusQuery, NFTBySeriesQuery, NFTQuery, NFTsQuery, statNFTsUserQuery } from "../validators/nftValidators";
import { convertSortString, convertSortStringDistinct, LIMIT_MAX_PAGINATION } from "../../utils";
import { getFiltersQuery, getHistoryQuery, getSeriesStatusQuery, NFTBySeriesQuery, NFTQuery, NFTsQuery, statNFTsUserQuery } from "../validators/nftValidators";
// import L from '../../common/logger';

const nodes = `
Expand All @@ -22,7 +22,7 @@ const nodes = `


export class GQLQueriesBuilder {
NFTs = (query: NFTsQuery) => gql`
distinctNFTs = (query: NFTsQuery) => gql`
{
distinctSerieNfts(
first: ${query.pagination?.limit ? query.pagination.limit : LIMIT_MAX_PAGINATION}
Expand All @@ -35,25 +35,17 @@ export class GQLQueriesBuilder {
${query.filter?.idsToExcludeCategories ? `{id: { notIn: ${JSON.stringify(query.filter.idsToExcludeCategories.map(x => String(x)))} }}` : ""}
${query.filter?.series ? `{serieId: { in: ${JSON.stringify(query.filter.series)} }}` : ""}
${query.filter?.creator ? `{creator: {equalTo: "${query.filter.creator}"}}` : ""}
${query.filter?.priceStartRange !== undefined ?
`{priceRounded: {greaterThanOrEqualTo: "${query.filter.priceStartRange}"}}`
: ""}
${query.filter?.priceEndRange !== undefined ?
`{priceRounded: {lessThanOrEqualTo: "${query.filter.priceEndRange}"}}`
: ""}
${query.filter?.timestampCreateStartRange !== undefined ?
`{timestampCreate: {greaterThanOrEqualTo: "${query.filter.timestampCreateStartRange}"}}`
: ""}
${query.filter?.timestampCreateEndRange !== undefined ?
`{timestampCreate: {lessThanOrEqualTo: "${query.filter.timestampCreateEndRange}"}}`
: ""}
]
}
${query.filter?.owner ? `owner: "${query.filter.owner}"` : ""}
${query.filter?.marketplaceId!==undefined ? `marketplaceId: "${query.filter.marketplaceId}"` : ""}
${query.filter?.listed!==undefined ? `listed: ${!query.filter.listed ? 0 : 1}` : ""}
${query.filter?.isCapsule!==undefined ? `isCapsule: ${!query.filter.isCapsule ? false : true}` : ""}
${query.sort ? `orderBy: [${convertSortString(query.sort)}]` : ""}
${query.filter?.priceStartRange!==undefined ? `priceStartRange: ${query.filter.priceStartRange}` : ""}
${query.filter?.priceEndRange!==undefined ? `priceEndRange: ${query.filter.priceEndRange}` : ""}
${query.filter?.timestampCreateStartRange!==undefined ? `timestampCreateStartRange: ${query.filter.timestampCreateStartRange}` : ""}
${query.filter?.timestampCreateEndRange!==undefined ? `timestampCreateEndRange: ${query.filter.timestampCreateEndRange}` : ""}
${query.sort ? convertSortStringDistinct(query.sort) : ""}
) {
totalCount
pageInfo {
Expand All @@ -65,6 +57,41 @@ export class GQLQueriesBuilder {
}
`;

NFTs = (query: NFTsQuery) => gql`
{
nftEntities(
first: ${query.pagination?.limit ? query.pagination.limit : LIMIT_MAX_PAGINATION}
offset: ${query.pagination?.page && query.pagination?.limit ? (query.pagination.page - 1) * query.pagination.limit : 0}
filter:{
and:[
${query.filter?.ids ? `{id: { in: ${JSON.stringify(query.filter.ids.map(x => String(x)))} }}` : ""}
${query.filter?.idsToExclude ? `{id: { notIn: ${JSON.stringify(query.filter.idsToExclude.map(x => String(x)))} }}` : ""}
${query.filter?.idsCategories ? `{id: { in: ${JSON.stringify(query.filter.idsCategories.map(x => String(x)))} }}` : ""}
${query.filter?.idsToExcludeCategories ? `{id: { notIn: ${JSON.stringify(query.filter.idsToExcludeCategories.map(x => String(x)))} }}` : ""}
${query.filter?.series ? `{serieId: { in: ${JSON.stringify(query.filter.series)} }}` : ""}
${query.filter?.creator ? `{creator: {equalTo: "${query.filter.creator}"}}` : ""}
${query.filter?.owner ? `{owner: {equalTo: "${query.filter.owner}"}}` : ""}
${query.filter?.marketplaceId ? `{marketplaceId: {equalTo: "${query.filter.marketplaceId}"}}` : ""}
${query.filter?.listed ? `{listed: {equalTo: ${!query.filter.listed ? 0 : 1}}}` : ""}
${query.filter?.isCapsule ? `{isCapsule: {equalTo: ${!query.filter.isCapsule ? 0 : 1}}}` : ""}
${query.filter?.priceStartRange ? `{priceRounded: {greaterThanOrEqualTo: ${query.filter.priceStartRange}}}` : ""}
${query.filter?.priceEndRange ? `{priceRounded: {lessThanOrEqualTo: ${query.filter.priceEndRange}}}` : ""}
${query.filter?.timestampCreateStartRange ? `{timestampCreate: {greaterThanOrEqualTo: "${query.filter.priceStartRange}"}}` : ""}
${query.filter?.timestampCreateEndRange ? `{timestampCreate: {lessThanOrEqualTo: "${query.filter.timestampCreateEndRange}"}}` : ""}
]
}
${query.sort ? convertSortString(query.sort) : ""}
) {
totalCount
pageInfo {
hasNextPage
hasPreviousPage
}
${nodes}
}
}
`;

NFTfromId = (query: NFTQuery) => gql`
{
nftEntities(
Expand Down Expand Up @@ -219,7 +246,7 @@ export class GQLQueriesBuilder {
first: ${query.pagination.limit}
offset: ${(query.pagination.page - 1) * query.pagination.limit}
` : ""}
orderBy: ${query.sort ? `[${convertSortString(query.sort)}]` : "TIMESTAMP_DESC"}
orderBy: ${query.sort ? `[${convertSortStringDistinct(query.sort)}]` : "TIMESTAMP_DESC"}
filter: {and:[
${query.filter?.onlyNftId ?
`{nftId: {equalTo: "${query.filter.nftId}"}}`
Expand Down Expand Up @@ -399,6 +426,67 @@ countAllListedInMarketplace = (marketplaceId: number) => gql`
}
`;

getMostSold = (query: getFiltersQuery) => gql`
{
mostSold(
first: ${query.pagination?.limit ? query.pagination.limit : LIMIT_MAX_PAGINATION}
offset: ${query.pagination?.page && query.pagination?.limit ? (query.pagination.page - 1) * query.pagination.limit : 0}
typeOfTransaction: "sale"
orderBy: OCCURENCES_DESC
) {
totalCount
pageInfo {
hasNextPage
hasPreviousPage
}
nodes {
id
occurences
}
}
}
`;

getMostSoldSeries = (query: getFiltersQuery) => gql`
{
mostSoldSeries(
first: ${query.pagination?.limit ? query.pagination.limit : LIMIT_MAX_PAGINATION}
offset: ${query.pagination?.page && query.pagination?.limit ? (query.pagination.page - 1) * query.pagination.limit : 0}
typeOfTransaction: "sale"
orderBy: OCCURENCES_DESC
) {
totalCount
pageInfo {
hasNextPage
hasPreviousPage
}
nodes {
id
occurences
}
}
}
`;

getTopSellers = (query: getFiltersQuery) => gql`
{
topSeller(
first: ${query.pagination?.limit ? query.pagination.limit : LIMIT_MAX_PAGINATION}
offset: ${query.pagination?.page && query.pagination?.limit ? (query.pagination.page - 1) * query.pagination.limit : 0}
orderBy: OCCURENCES_DESC
) {
totalCount
pageInfo {
hasNextPage
hasPreviousPage
}
nodes {
id
occurences
}
}
}
`;
}

export default new GQLQueriesBuilder();
Loading

0 comments on commit 2ceb743

Please sign in to comment.