Skip to content

Commit

Permalink
refactor: 💡 index naming in facility repository
Browse files Browse the repository at this point in the history
  • Loading branch information
mfw78 authored and kostysh committed Jun 6, 2022
1 parent bd1e297 commit 6692c2c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 29 deletions.
45 changes: 23 additions & 22 deletions src/repositories/FacilityRepository.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import DBService, {
FacilityItemType,
FacilityKey,
FacilityIndexKey,
FacilityValues,
FacilitySpaceValues
} from '../services/DBService';
Expand All @@ -17,7 +18,7 @@ export class FacilityRepository {

// --- facility index management

public async getFacilityIds(): Promise<string[]> {
public async getAllFacilityIds(): Promise<string[]> {
try {
return await this.db.get<string, string[]>('facilities', {
valueEncoding: 'json'
Expand All @@ -31,7 +32,7 @@ export class FacilityRepository {
}

public async addFacilityToIndex(facilityId: string) {
const facilityIds = await this.getFacilityIds();
const facilityIds = await this.getAllFacilityIds();

if (facilityIds.length > 0) {
const ids = new Set<string>(facilityIds);
Expand All @@ -43,7 +44,7 @@ export class FacilityRepository {
}

public async delFacilityFromIndex(facilityId: string) {
const facilityIds = await this.getFacilityIds();
const facilityIds = await this.getAllFacilityIds();

if (facilityIds.length > 0) {
const ids = new Set<string>(facilityIds);
Expand All @@ -57,15 +58,15 @@ export class FacilityRepository {

public async setFacilityKey(
facilityId: string,
key: string,
key: FacilityKey | FacilityIndexKey,
value: FacilityValues
): Promise<void> {
await this.dbService.getFacilityDB(facilityId).put(key, value);
}

public async getFacilityKey(
facilityId: string,
key: string
key: FacilityKey | FacilityIndexKey
): Promise<FacilityValues> {
try {
return await this.dbService.getFacilityDB(facilityId).get(key);
Expand All @@ -79,14 +80,14 @@ export class FacilityRepository {

// --- items (space and otherItems) index management

public async getItemIds(
public async getAllItemIds(
facilityId: string,
itemType: FacilityItemType
idx: FacilityIndexKey
): Promise<string[]> {
try {
return await this.dbService
.getFacilityDB(facilityId)
.get<string, string[]>(itemType, {
.get<string, string[]>(idx, {
valueEncoding: 'json'
});
} catch (e) {
Expand All @@ -97,34 +98,34 @@ export class FacilityRepository {
return [];
}

public async addItemToIndex(
public async addToIndex(
facilityId: string,
itemType: FacilityItemType,
idx: FacilityIndexKey,
itemId: string
): Promise<void> {
const itemIds = await this.getItemIds(facilityId, itemType);
const itemIds = await this.getAllItemIds(facilityId, idx);
const db = this.dbService.getFacilityDB(facilityId);

if (itemIds.length > 0) {
const ids = new Set<string>(itemIds);
ids.add(itemId);
await db.put(itemType, Array.from(ids));
await db.put(idx, Array.from(ids));
} else {
await db.put(itemType, [itemId]);
await db.put(idx, [itemId]);
}
}

public async delItemFromIndex(
public async delFromIndex(
facilityId: string,
itemType: FacilityItemType,
idx: FacilityIndexKey,
itemId: string
): Promise<void> {
const itemIds = await this.getItemIds(facilityId, itemType);
const itemIds = await this.getAllItemIds(facilityId, idx);

if (itemIds.length > 0) {
const ids = new Set<string>(itemIds);
if (ids.delete(itemId)) {
await this.db.put(itemType, Array.from(ids));
await this.db.put(idx, Array.from(ids));
}
}
}
Expand All @@ -133,25 +134,25 @@ export class FacilityRepository {

public async setItemKey(
facilityId: string,
itemType: FacilityItemType,
idx: FacilityIndexKey,
itemId: string,
key: string,
value: Item | FacilitySpaceValues
): Promise<void> {
await this.dbService
.getFacilityItemDB(facilityId, itemType, itemId)
.getFacilityItemDB(facilityId, idx, itemId)
.put(key, value);
}

public async getItemKey(
facilityId: string,
itemType: FacilityItemType,
idx: FacilityIndexKey,
itemId: string,
key: string
): Promise<Item | FacilitySpaceValues> {
try {
return await this.dbService
.getFacilityItemDB(facilityId, itemType, itemId)
.getFacilityItemDB(facilityId, idx, itemId)
.get(key);
} catch (e) {
if (e.status === 404) {
Expand Down
10 changes: 6 additions & 4 deletions src/services/DBService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import {
LOSRateModifier,
NoticeRequiredRule,
OccupancyRateModifier,
Rates
Rates,
StubStorage
} from '../proto/lpms';
import { Stub } from '../proto/stub';
import { Person } from '../proto/person';
Expand All @@ -33,14 +34,15 @@ export type ModifiersValues =
| OccupancyRateModifier
| LOSRateModifier;
export type ModifiersKey = 'day_of_week' | 'occupancy' | 'length_of_stay';
export type FacilityKey = 'metadata';
export type FacilityIndexKey = 'stubs' | 'spaces' | 'otherItems';
export type FacilityValues = FacilityMetadata | string[];
export type FacilitySpaceValues = ItemMetadata | SpaceMetadata;
export type FacilityItemType = 'spaces' | 'otherItems';
export type FacilityItemValues = ItemMetadata | FacilitySpaceValues;
export type FormattedDate = `${number}-${number}-${number}`;
export type DefaultOrDateItemKey = 'default' | FormattedDate;
export type FacilityStubKey = string | FormattedDate;
export type FacilityStubValues = string[] | Stub;
export type FacilityStubValues = string[] | StubStorage;
export type SpaceStubKey = FormattedDate | `${FormattedDate}-num_booked`;
export type SpaceStubValues = string[] | number;

Expand Down Expand Up @@ -117,7 +119,7 @@ export default class DBService {

public getFacilityItemDB(
facilityId: string,
itemType: FacilityItemType,
itemType: FacilityIndexKey,
itemId: string
) {
const key = `${itemType}_${itemId}`;
Expand Down
6 changes: 3 additions & 3 deletions src/services/FacilityService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Item } from '../proto/facility';
import {
FacilityItemType,
FacilityIndexKey,
FacilityValues,
FacilitySpaceValues
} from './DBService';
Expand Down Expand Up @@ -30,11 +30,11 @@ export class FacilityService {

public async setItemDbKeys(
facilityId: string,
itemType: FacilityItemType,
itemType: FacilityIndexKey,
itemId: string,
entries: [string, Item | FacilitySpaceValues][]
): Promise<void> {
await this.repository.addItemToIndex(facilityId, itemType, itemId);
await this.repository.addToIndex(facilityId, itemType, itemId);

await Promise.all(
entries.map(([key, value]) =>
Expand Down

0 comments on commit 6692c2c

Please sign in to comment.