Skip to content

Commit

Permalink
Merge pull request #339 from aayushgauba/main
Browse files Browse the repository at this point in the history
Filter by grower_id
  • Loading branch information
dadiorchen committed Jul 1, 2023
2 parents cc30af6 + 03df388 commit 8ad771a
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 4 deletions.
41 changes: 41 additions & 0 deletions server/infra/database/OrganizationRepositoryV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,28 @@ export default class OrganizationRepositoryV2 extends BaseRepository<Organizatio
return objectPatched;
}

async getByGrower(grower_id: string, options: FilterOptions) {
const { limit, offset } = options;
const sql = `
SELECT
entity.*,
l.country_id, l.country_name, l.continent_id, l.continent_name
FROM entity
LEFT JOIN webmap.organization_location l ON l.id = entity.id
LEFT JOIN planter ON planter.organization_id = entity.id
WHERE planter.grower_account_uuid = '${grower_id}'
LIMIT ${limit}
OFFSET ${offset}
`;
const object = await this.session.getDB().raw(sql);
const objectPatched = await patch(
object.rows,
PATCH_TYPE.EXTRA_ORG,
this.session,
);
return objectPatched;
}

async getById(id: string | number) {
const object = await this.session
.getDB()
Expand All @@ -51,6 +73,25 @@ export default class OrganizationRepositoryV2 extends BaseRepository<Organizatio
return objectPatched;
}

// async getByGrowerId(id: string | number) {
// const object = await this.session
// .getDB()
// .select()
// .from(this.tableName)
// .where('grower_account_', id)
// .first();

// if (!object) {
// throw new HttpError(404, `Can not find ${this.tableName} by id:${id}`);
// }
// const objectPatched = await patch(
// object,
// PATCH_TYPE.EXTRA_ORG,
// this.session,
// );
// return objectPatched;
// }

async getByMapName(mapName: string) {
const object = await this.session
.getDB()
Expand Down
3 changes: 2 additions & 1 deletion server/models/Organization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Organization from 'interfaces/Organization';
import { delegateRepository } from '../infra/database/delegateRepository';
import OrganizationRepository from '../infra/database/OrganizationRepository';

type Filter = Partial<{ planter_id: number; organization_id: number }>;
type Filter = Partial<{ planter_id: number; organization_id: number}>;

function getByFilter(
organizationRepository: OrganizationRepository,
Expand All @@ -18,6 +18,7 @@ function getByFilter(
);
return trees;
}

const trees = await organizationRepository.getByFilter(filter, options);
return trees;
};
Expand Down
54 changes: 54 additions & 0 deletions server/models/OrganizationV2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import log from 'loglevel';
import OrganizationRepositoryV2 from 'infra/database/OrganizationRepositoryV2';
import FilterOptions from 'interfaces/FilterOptions';
import Organization from 'interfaces/Organization';
import { delegateRepository } from '../infra/database/delegateRepository';

type Filter = Partial<{ planter_id: number; organization_id: number, grower_id:string }>;

function getByFilter(
organizationRepository: OrganizationRepositoryV2,
): (filter: Filter, options: FilterOptions) => Promise<Organization[]> {
return async function (filter: Filter, options: FilterOptions) {
if (filter.planter_id) {
log.warn('using planter filter...');
const trees = await organizationRepository.getByPlanter(
filter.planter_id,
options,
);
return trees;
}
if (filter.grower_id){
log.warn('using planter filter...');
const trees = await organizationRepository.getByGrower(
filter.grower_id,
options,
);
return trees;
}
const trees = await organizationRepository.getByFilter(filter, options);
return trees;
};
}

function getOrganizationLinks(organization) {
const links = {
featured_trees: `/trees?organization_id=${organization.id}&limit=20&offset=0`,
associated_planters: `/planters?organization_id=${organization.id}&limit=20&offset=0`,
species: `/species?organization_id=${organization.id}&limit=20&offset=0`,
};
return links;
}

export default {
getById: delegateRepository<OrganizationRepositoryV2, Organization>('getById'),
getByMapName: delegateRepository<OrganizationRepositoryV2, Organization>(
'getByMapName',
),
getByFilter,
getOrganizationLinks,
getFeaturedOrganizations: delegateRepository<
OrganizationRepositoryV2,
Organization
>('getFeaturedOrganizations'),
};
9 changes: 6 additions & 3 deletions server/routers/organizationsRouterV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import Joi from 'joi';
import { handlerWrapper } from './utils';
import OrganizationRepositoryV2 from '../infra/database/OrganizationRepositoryV2';
import Session from '../infra/database/Session';
import OrganizationModel from '../models/Organization';
import OrganizationModel from '../models/OrganizationV2';

type Filter = Partial<{ planter_id: number; organization_id: number }>;
type Filter = Partial<{ planter_id: number; organization_id: number, grower_id:string }>;

const router = express.Router();

Expand Down Expand Up @@ -51,15 +51,18 @@ router.get(
req.query,
Joi.object().keys({
planter_id: Joi.number().integer().min(0),
grower_id:Joi.string(),
limit: Joi.number().integer().min(1).max(1000),
offset: Joi.number().integer().min(0),
}),
);
const { limit = 20, offset = 0, planter_id } = req.query;
const { limit = 20, offset = 0, planter_id, grower_id } = req.query;
const repo = new OrganizationRepositoryV2(new Session());
const filter: Filter = {};
if (planter_id) {
filter.planter_id = planter_id;
} else if(grower_id){
filter.grower_id = grower_id;
}
const result = await OrganizationModel.getByFilter(repo)(filter, {
limit,
Expand Down

0 comments on commit 8ad771a

Please sign in to comment.