Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/Base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { OfferSearch } from './repository/models/OfferSearch';
import OfferSearchResultItem from './repository/models/OfferSearchResultItem';
import OfferShareData from './repository/models/OfferShareData';
import { Page, Pageable } from './repository/models/Page';
import { Pair } from './repository/models/Pair';
import Profile from './repository/models/Profile';
import SearchRequest from './repository/models/SearchRequest';
import { ExternalService } from './repository/models/services/ExternalService';
Expand Down Expand Up @@ -167,6 +168,7 @@ export {
OfferShareData,
OfferShareDataRepository,
OfferShareDataRepositoryImpl,
Pair,
Page,
Pageable,
PermissionsSource,
Expand Down
5 changes: 3 additions & 2 deletions src/manager/SearchManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { OfferInteraction, OfferResultAction } from '../repository/models/OfferI
import { OfferSearch } from '../repository/models/OfferSearch';
import OfferSearchResultItem from '../repository/models/OfferSearchResultItem';
import { Page } from '../repository/models/Page';
import { Pair } from '../repository/models/Pair';
import SearchRequest from '../repository/models/SearchRequest';
import { OfferSearchRequestInterestMode } from '../repository/search/OfferSearchRepository';

Expand All @@ -18,9 +19,9 @@ export interface SearchManager {

updateRequest(searchRequest: SearchRequest): Promise<SearchRequest>;

cloneRequest(searchRequest: SearchRequest): Promise<SearchRequest>;
cloneRequest(searchRequestIds: Array<number>): Promise<Array<SearchRequest>>;

cloneOfferSearch(id: number, searchRequest: SearchRequest): Promise<Array<OfferSearch>>;
cloneOfferSearch(originToCopySearchRequestIds: Array<Pair<number, number>>): Promise<Array<OfferSearch>>;

getMyRequests(id?: number): Promise<Array<SearchRequest>>;

Expand Down
10 changes: 5 additions & 5 deletions src/manager/SearchManagerImpl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { OfferInteraction, OfferResultAction } from '../repository/models/OfferI
import { OfferSearch } from '../repository/models/OfferSearch';
import OfferSearchResultItem from '../repository/models/OfferSearchResultItem';
import { Page } from '../repository/models/Page';
import { Pair } from '../repository/models/Pair';
import SearchRequest from '../repository/models/SearchRequest';
import { OfferSearchRepository, OfferSearchRequestInterestMode } from '../repository/search/OfferSearchRepository';
import { SearchRequestRepository } from '../repository/search/SearchRequestRepository';
Expand Down Expand Up @@ -35,12 +36,12 @@ export class SearchManagerImpl implements SearchManager {
return this.requestRepository.update(this.account.publicKey, searchRequest.id, searchRequest);
}

public cloneRequest(searchRequest: SearchRequest): Promise<SearchRequest> {
return this.requestRepository.clone(this.account.publicKey, searchRequest);
public cloneRequest(searchRequestIds: Array<number>): Promise<Array<SearchRequest>> {
return this.requestRepository.clone(this.account.publicKey, searchRequestIds);
}

public cloneOfferSearch(id: number, searchRequest: SearchRequest): Promise<Array<OfferSearch>> {
return this.offerSearchRepository.clone(this.account.publicKey, id, searchRequest);
public cloneOfferSearch(originToCopySearchRequestIds: Array<Pair<number, number>>): Promise<Array<OfferSearch>> {
return this.offerSearchRepository.clone(this.account.publicKey, originToCopySearchRequestIds);
}

public getMyRequests(id?: number): Promise<Array<SearchRequest>> {
Expand Down Expand Up @@ -177,5 +178,4 @@ export class SearchManagerImpl implements SearchManager {
private onChangeAccount(account: Account) {
this.account = account;
}

}
10 changes: 10 additions & 0 deletions src/repository/models/Pair.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export class Pair<A, B> {

public readonly first: A;
public readonly second: B;

constructor(first: A, second: B) {
this.first = first;
this.second = second;
}
}
4 changes: 2 additions & 2 deletions src/repository/search/OfferSearchRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { OfferInteraction, OfferResultAction } from '../models/OfferInteraction'
import { OfferSearch } from '../models/OfferSearch';
import OfferSearchResultItem from '../models/OfferSearchResultItem';
import { Page } from '../models/Page';
import SearchRequest from '../models/SearchRequest';
import { Pair } from '../models/Pair';

export enum OfferSearchRequestInterestMode { must = 'must', prefer = 'prefer'}

Expand Down Expand Up @@ -68,5 +68,5 @@ export interface OfferSearchRepository {

addEventToOfferSearch(event: string, offerSearchId: number): Promise<void>;

clone(owner: string, id: number, searchRequest: SearchRequest): Promise<Array<OfferSearch>>;
clone(owner: string, originToCopySearchRequestIds: Array<Pair<number, number>>): Promise<Array<OfferSearch>>;
}
12 changes: 8 additions & 4 deletions src/repository/search/OfferSearchRepositoryImpl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { OfferInteraction, OfferResultAction } from '../models/OfferInteraction'
import { OfferSearch } from '../models/OfferSearch';
import OfferSearchResultItem from '../models/OfferSearchResultItem';
import { Page } from '../models/Page';
import SearchRequest from '../models/SearchRequest';
import { Pair } from '../models/Pair';
import { HttpMethod } from '../source/http/HttpMethod';
import { HttpTransport } from '../source/http/HttpTransport';
import { OfferSearchRepository, OfferSearchRequestInterestMode } from './OfferSearchRepository';
Expand All @@ -19,6 +19,7 @@ export class OfferSearchRepositoryImpl implements OfferSearchRepository {
private readonly OFFER_SEARCH_CONFIRM_API = '/v1/search/result/confirm/{id}';
private readonly OFFER_SEARCH_CLAIM_PURCHASE_API = '/v1/search/result/claimpurchase/{id}';
private readonly OFFER_SEARCH_ADD_API = '/v1/search/result/';
private readonly OFFER_SEARCH_ADD_API_V2 = '/v2/search/result/';
private readonly OFFER_SEARCH_BY_PARAMS_API =
'/v1/search/result/user?owner={owner}&searchIds={searchIds}' +
'&state={state}&unique={unique}&page={page}&size={size}&sort={sort}&interaction={interaction}';
Expand Down Expand Up @@ -216,11 +217,14 @@ export class OfferSearchRepositoryImpl implements OfferSearchRepository {
);
}

public clone(owner: string, id: number, searchRequest: SearchRequest): Promise<Array<OfferSearch>> {
public clone(
owner: string,
originToCopySearchRequestIds: Array<Pair<number, number>>
): Promise<Array<OfferSearch>> {
return this.transport.sendRequest(
this.OFFER_SEARCH_ADD_API + owner + '/' + id,
this.OFFER_SEARCH_ADD_API_V2 + owner,
HttpMethod.Put,
searchRequest.toJson()
originToCopySearchRequestIds
).then((response) => this.jsonToOfferSearchList(response.json));
}

Expand Down
2 changes: 1 addition & 1 deletion src/repository/search/SearchRequestRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export interface SearchRequestRepository {

update(owner: string, id: number, searchRequest: SearchRequest): Promise<SearchRequest>;

clone(owner: string, searchRequest: SearchRequest): Promise<SearchRequest>;
clone(owner: string, searchRequestIds: Array<number>): Promise<Array<SearchRequest>>;

deleteById(owner: string, id: number): Promise<number>;

Expand Down
9 changes: 5 additions & 4 deletions src/repository/search/SearchRequestRepositoryImpl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { SearchRequestRepository } from './SearchRequestRepository';
export default class SearchRequestRepositoryImpl implements SearchRequestRepository {

private readonly SEARCH_REQUEST_API: string = '/v1/client/{owner}/search/request/{id}';
private readonly SEARCH_REQUEST_API_V2: string = '/v2/client/{owner}/search/request/{id}';
private readonly SEARCH_REQUEST_PAGEABLE_API: string = '/v1/search/requests?page={page}&size={size}';

constructor(private readonly transport: HttpTransport) {
Expand All @@ -29,12 +30,12 @@ export default class SearchRequestRepositoryImpl implements SearchRequestReposit
).then((response) => SearchRequest.fromJson(response.json));
}

public clone(owner: string, searchRequest: SearchRequest): Promise<SearchRequest> {
public clone(owner: string, searchRequestIds: Array<number>): Promise<Array<SearchRequest>> {
return this.transport.sendRequest(
this.SEARCH_REQUEST_API.replace('{owner}', owner).replace('{id}', ''),
this.SEARCH_REQUEST_API_V2.replace('{owner}', owner).replace('{id}', ''),
HttpMethod.Put,
searchRequest.toJson()
).then((response) => SearchRequest.fromJson(response.json));
searchRequestIds
).then((response) => this.jsonToListSearchRequests(response.json));
}

public deleteById(owner: string, id: number): Promise<number> {
Expand Down
25 changes: 19 additions & 6 deletions test/search/SearchManagerTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import Base, {
} from '../../src/Base';
import { SortOfferSearch } from '../../src/manager/SearchManager';
import Account from '../../src/repository/models/Account';
import { Pair } from '../../src/repository/models/Pair';
import { RepositoryStrategyType } from '../../src/repository/RepositoryStrategyType';
import { HttpMethod } from '../../src/repository/source/http/HttpMethod';
import { Response } from '../../src/repository/source/http/Response';
Expand Down Expand Up @@ -279,21 +280,33 @@ describe('Search Manager', async () => {
let searchRequests = (await userBase.searchManager.getSearchResult(insertedSearchRequest.id)).content;
searchRequests.length.should.be.eql(1);

const clonedSearchRequest = await userBase.searchManager.cloneRequest(insertedSearchRequest);
clonedSearchRequest.should.be.exist;
const clonedSearchRequest = await userBase.searchManager.cloneRequest([insertedSearchRequest.id]);
clonedSearchRequest.length.should.be.eq(1);

searchRequests = (await userBase.searchManager.getSearchResult(clonedSearchRequest.id)).content;
searchRequests = (await userBase.searchManager.getSearchResult(clonedSearchRequest[0].id)).content;
searchRequests.length.should.be.eql(1);

const copyToSearchRequest = await userBase.searchManager.createRequest(searchRequest);
let clonedOfferSearch = (await userBase.searchManager.getSearchResult(clonedSearchRequest[0].id)).content;
clonedOfferSearch.length.should.be.eql(1);
clonedOfferSearch[0].offer.id.should.be.eq(offerSearch.offerId);
clonedOfferSearch[0].offerSearch.offerId.should.be.eq(offerSearch.offerId);
clonedOfferSearch[0].offerSearch.owner.should.be.eq(clonedSearchRequest[0].owner);

const freeSearchRequest = await userBase.searchManager.createRequest(searchRequest);

const clonedSearchRequest2 = await userBase.searchManager.cloneOfferSearch(
clonedSearchRequest.id,
copyToSearchRequest
[new Pair<number, number>(clonedSearchRequest[0].id, freeSearchRequest.id)],
);

clonedSearchRequest2.length.should.be.eql(1);
clonedSearchRequest2[0].offerId.should.be.eql(businessOffer.id);
clonedSearchRequest2[0].id.should.not.eql(searchRequests[0].offerSearch.id);

clonedOfferSearch = (await userBase.searchManager.getSearchResult(freeSearchRequest.id)).content;
clonedOfferSearch.length.should.be.eql(1);
clonedOfferSearch[0].offerSearch.offerId.should.be.eq(offerSearch.offerId);
clonedOfferSearch[0].offerSearch.owner.should.be.eq(freeSearchRequest.owner);

} catch (e) {
console.log(e);
throw e;
Expand Down