Skip to content

Commit

Permalink
feat: firebase 9
Browse files Browse the repository at this point in the history
  • Loading branch information
RJiraya committed Dec 24, 2021
1 parent 003c4ab commit aac103d
Show file tree
Hide file tree
Showing 12 changed files with 591 additions and 582 deletions.
12 changes: 12 additions & 0 deletions .run/test_ngx-firebase-repository.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="test:ngx-firebase-repository" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/package.json"/>
<command value="run"/>
<scripts>
<script value="test:ci:ngx-firebase-repository"/>
</scripts>
<node-interpreter value="project"/>
<envs/>
<method v="2"/>
</configuration>
</component>
1,063 changes: 541 additions & 522 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"@witty-services/ts-serializer": "^1.0.5",
"angular-in-memory-web-api": "^0.10.0",
"chance": "^1.1.4",
"firebase": "^8.3.1",
"firebase": "^9.6.1",
"object-hash": "^2.0.3",
"rxjs": "~6.6.7",
"tslib": "^2.0.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ import { Injectable, Type } from '@angular/core';
import { InjectRepository, NgxRepositoryModule } from '@witty-services/ngx-repository';
import { TestBed } from '@angular/core/testing';
import { FirebaseRepository, FIRESTORE_APP, NgxFirebaseRepositoryModule } from '../../public-api';
import firebase from 'firebase';
import { FirestoreMock } from './firestore-mock.spec';
import Firestore = firebase.firestore.Firestore;
import { Firestore } from 'firebase/firestore';

export interface RepositoryContext<T> {
repository: FirebaseRepository<T, string>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,12 @@ import { FirebaseDocumentReferenceRepositoryResponse } from '../response/firebas
import { NgxFirebaseRepositoryUpdateRequestError } from '../error/ngx-firebase-repository-update-request.error';
import { NgxFirebaseRepositoryDeleteRequestError } from '../error/ngx-firebase-repository-delete-request.error';
import { FirebaseEmptyRepositoryResponse } from '../response/firebase-empty-repository.response';
import firebase from 'firebase';
import { FirebaseCriteriaRepositoryRequest } from '../request/firebase-criteria-repository.request';
import { BeforeExecuteFirebaseRequestEvent } from './event/before-execute-firebase-request.event';
import { FirebaseRepositoryResponse } from '../response/firebase-repository.response';
import { AfterExecuteFirebaseRequestEvent } from './event/after-execute-firebase-request.event';
import { cloneDeep } from 'lodash';
import Firestore = firebase.firestore.Firestore;
import QuerySnapshot = firebase.firestore.QuerySnapshot;
import DocumentData = firebase.firestore.DocumentData;
import Query = firebase.firestore.Query;
import DocumentSnapshot = firebase.firestore.DocumentSnapshot;
import DocumentReference = firebase.firestore.DocumentReference;
import { addDoc, collection, deleteDoc, doc, DocumentReference, DocumentSnapshot, Firestore, Query, QuerySnapshot, setDoc, updateDoc } from 'firebase/firestore';

// @dynamic
@Injectable()
Expand Down Expand Up @@ -67,7 +61,7 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
break;

default:
throw new Error(`Operation not supported (${ request.operation })`);
throw new Error(`Operation not supported (${request.operation})`);
}

return obs$.pipe(
Expand All @@ -79,7 +73,7 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
}

public findById(request: FirebaseRepositoryRequest): Observable<RepositoryResponse> {
return fromRef<DocumentSnapshot>(this.firestore.doc(request.path.value)).pipe(
return fromRef<DocumentSnapshot>(doc(this.firestore, request.path.value)).pipe(
catchError((err: any) => {
if (err.name === 'FirebaseError') {
return throwError(new NgxFirebaseRepositoryReadRequestError(request, err));
Expand All @@ -92,10 +86,10 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
}

public create(request: FirebaseRepositoryRequest): Observable<RepositoryResponse> {
if (request.path.id != null && request.path.id.value != null) { // TODO @RMA upgrade to typescript 4
const documentRef: DocumentReference = this.firestore.doc(request.path.value);
if (request?.path?.id?.value != null) {
const documentRef: DocumentReference = doc(this.firestore, request.path.value);

return from(documentRef.set(request.body)).pipe(
return from(setDoc(documentRef, request.body)).pipe(
mapTo(documentRef),
catchError((err: any) => {
if (err.name === 'FirebaseError') {
Expand All @@ -107,7 +101,7 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
map((response: DocumentReference) => new FirebaseDocumentReferenceRepositoryResponse(response, request))
);
} else {
return from(this.firestore.collection(request.path.value).add(request.body)).pipe(
return from(addDoc(collection(this.firestore, request.path.value), request.body)).pipe(
catchError((err: any) => {
if (err.name === 'FirebaseError') {
return throwError(new NgxFirebaseRepositoryCreateRequestError(null, err));
Expand All @@ -121,7 +115,7 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
}

public update(request: FirebaseRepositoryRequest): Observable<RepositoryResponse> {
return from(this.firestore.doc(request.path.value).update(request.body)).pipe(
return from(updateDoc(doc(this.firestore, request.path.value), request.body)).pipe(
catchError((err: any) => {
if (err.name === 'FirebaseError') {
return throwError(new NgxFirebaseRepositoryUpdateRequestError(request, err));
Expand All @@ -134,7 +128,7 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {
}

public delete(request: FirebaseRepositoryRequest): Observable<RepositoryResponse> {
return from(this.firestore.doc(request.path.value).delete()).pipe(
return from(deleteDoc(doc(this.firestore, request.path.value))).pipe(
catchError((err: any) => {
if (err.name === 'FirebaseError') {
return throwError(new NgxFirebaseRepositoryDeleteRequestError(request, err));
Expand All @@ -153,15 +147,15 @@ export class FirebaseRepositoryDriver implements RepositoryDriver {

const query: Query = (request as FirebaseCriteriaRepositoryRequest).getQuery(this.firestore);

return fromRef<QuerySnapshot<DocumentData>>(query).pipe(
return fromRef<QuerySnapshot>(query).pipe(
catchError((err: any) => {
if (err.name === 'FirebaseError') {
return throwError(new NgxFirebaseRepositoryReadRequestError(request, err));
} else {
return throwError(err);
}
}),
map((response: QuerySnapshot<DocumentData>) => new FirebaseCollectionRepositoryResponse(response, request))
map((response: QuerySnapshot) => new FirebaseCollectionRepositoryResponse(response, request))
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import firebase from 'firebase';
import { NgxFirebaseRepositoryError } from './ngx-firebase-repository.error';
import { FirebaseRepositoryRequest } from '../request/firebase-repository.request';
import FirebaseError = firebase.FirebaseError;
import { FirestoreError } from 'firebase/firestore';

export class NgxFirebaseRepositoryReadRequestError extends NgxFirebaseRepositoryError {

public constructor(request: FirebaseRepositoryRequest, firebaseError: FirebaseError) {
public constructor(request: FirebaseRepositoryRequest, firebaseError: FirestoreError) {
super(request, firebaseError);

this.name = 'NgxFirebaseRepositoryReadRequestError';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { InjectionToken } from '@angular/core';
import firebase from 'firebase';
import Firestore = firebase.firestore.Firestore;
import { Firestore } from 'firebase/firestore';

/** @ignore */
export const FIRESTORE_APP: InjectionToken<Firestore> = new InjectionToken<Firestore>('FIRESTORE_APP');
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import { FirebaseNormalizer } from './normalizer/firebase.normalizer';
import { FirebaseRepositoryDriver } from './driver/firebase-repository.driver';
import { FirebaseRequestBuilder } from './request/firebase-request.builder';
import { FirebaseCriteriaRequestBuilder } from './request/firebase-criteria-request.builder';
import firebase from 'firebase';
import { LogExecuteFirebaseRequestEventListener } from './driver/listener/log-execute-firebase-request-event.listener';
import Firestore = firebase.firestore.Firestore;
import { Firestore } from 'firebase/firestore';

const MODULE_PROVIDERS: Provider[] = [
FirebaseRepositoryBuilder,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Path } from '@witty-services/ngx-repository';
import firebase from 'firebase';
import { FirebaseCriteria, FirebaseRequestOrderBy, FirebaseRequestQuery } from './firebase.criteria';
import { FirebaseOperation } from './firebase.operation';
import { FirebaseRepositoryRequest } from './firebase-repository.request';
import Query = firebase.firestore.Query;
import Firestore = firebase.firestore.Firestore;
import { collection, CollectionReference, endAt, endBefore, Firestore, limit, limitToLast, orderBy, Query, query, QueryConstraint, startAfter, startAt, where } from 'firebase/firestore';

export class FirebaseCriteriaRepositoryRequest extends FirebaseRepositoryRequest {

Expand All @@ -16,44 +14,45 @@ export class FirebaseCriteriaRepositoryRequest extends FirebaseRepositoryRequest
}

public getQuery(firestore: Firestore): Query {
let query: Query = firestore.collection(this.path.value);
const collectionReference: CollectionReference = collection(firestore, this.path.value);
const queries: QueryConstraint[] = [];

(this.criteria.queries || []).forEach((firebaseRequestQuery: FirebaseRequestQuery) => {
query = query.where(
queries.push(where(
firebaseRequestQuery.field,
firebaseRequestQuery.operator,
firebaseRequestQuery.value
);
));
});

(this.criteria.orderBys || []).forEach((firebaseRequestOrderBy: FirebaseRequestOrderBy) => {
query = query.orderBy(firebaseRequestOrderBy.fieldPath, firebaseRequestOrderBy.directionStr);
queries.push(orderBy(firebaseRequestOrderBy.fieldPath, firebaseRequestOrderBy.directionStr));
});

if (this.criteria.startAt != null) {
query = query.startAt(...this.criteria.startAt);
queries.push(startAt(...this.criteria.startAt));
}

if (this.criteria.startAfter != null) {
query = query.startAfter(...this.criteria.startAfter);
queries.push(startAfter(...this.criteria.startAfter));
}

if (this.criteria.endAt != null) {
query = query.endAt(...this.criteria.endAt);
queries.push(endAt(...this.criteria.endAt));
}

if (this.criteria.endBefore != null) {
query = query.endBefore(...this.criteria.endBefore);
queries.push(endBefore(...this.criteria.endBefore));
}

if (this.criteria.limit != null) {
query = query.limit(this.criteria.limit);
queries.push(limit(this.criteria.limit));
}

if (this.criteria.limitToLast != null) {
query = query.limitToLast(this.criteria.limitToLast);
queries.push(limitToLast(this.criteria.limitToLast));
}

return query;
return query(collectionReference, ...queries);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { Observable, of } from 'rxjs';
import { Path, RequestManagerContext } from '@witty-services/ngx-repository';
import { Inject, Injectable } from '@angular/core';
import firebase from 'firebase';
import { FIRESTORE_APP } from '../ngx-firebase-repository.module.di';
import { FirebaseCriteria } from './firebase.criteria';
import { FirebaseOperation } from './firebase.operation';
import { FirebaseNormalizer } from '../normalizer/firebase.normalizer';
import { FirebaseCriteriaRepositoryRequest } from './firebase-criteria-repository.request';
import { FirebaseRequestBuilder } from './firebase-request.builder';
import Firestore = firebase.firestore.Firestore;
import { Firestore } from 'firebase/firestore';

// @dynamic
@Injectable()
Expand All @@ -19,7 +18,7 @@ export class FirebaseCriteriaRequestBuilder extends FirebaseRequestBuilder {
super(normalizer, firestore);
}

public build({ body, query, configuration }: RequestManagerContext): Observable<FirebaseCriteriaRepositoryRequest> {
public build({body, query, configuration}: RequestManagerContext): Observable<FirebaseCriteriaRepositoryRequest> {
const operation: FirebaseOperation = configuration.getOperation() as FirebaseOperation;
const path: Path = this.getPath(body, query, configuration);
const normalizedBody: any = this.getBody(body);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
import { Observable, of } from 'rxjs';
import {
AfterNormalizeEvent,
BeforeNormalizeEvent,
ConfigurationContextProvider,
Path,
PublisherService,
RequestBuilder,
RequestManagerContext
} from '@witty-services/ngx-repository';
import { AfterNormalizeEvent, BeforeNormalizeEvent, ConfigurationContextProvider, Path, PublisherService, RequestBuilder, RequestManagerContext } from '@witty-services/ngx-repository';
import { FirebaseRepositoryRequest } from './firebase-repository.request';
import { Inject, Injectable } from '@angular/core';
import firebase from 'firebase';
import { FIRESTORE_APP } from '../ngx-firebase-repository.module.di';
import { FirebaseRepositoryParamConfiguration } from '../configuration/firebase-repository-param.configuration';
import { FirebaseOperation } from './firebase.operation';
import { FirebaseNormalizer } from '../normalizer/firebase.normalizer';
import { cloneDeep } from 'lodash';
import Firestore = firebase.firestore.Firestore;
import { Firestore } from 'firebase/firestore';

// @dynamic
@Injectable()
Expand Down
9 changes: 4 additions & 5 deletions projects/ngx-repository-app/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,12 @@ import { MyPageResponseProcessor } from './module/@core/processor/my-page-respon
import { ClientComponent } from './component/client/client.component';
import { NgxHttpRepositoryModule } from '@witty-services/ngx-http-repository';
import { FIRESTORE_APP, NgxFirebaseRepositoryModule } from '@witty-services/ngx-firebase-repository';
import firebase from 'firebase';
import { initializeApp } from 'firebase/app';
import { BookService } from './module/@core/service/book.service';
import Firestore = firebase.firestore.Firestore;
import initializeApp = firebase.initializeApp;
import { Firestore, getFirestore } from 'firebase/firestore';

export function createFirestore(): Firestore {
return initializeApp({
return getFirestore(initializeApp({
apiKey: 'AIzaSyDSd6EXdQWaWcBMxbTYp-kFAV3zxNu-ArM',
authDomain: 'ngx-repository.firebaseapp.com',
databaseURL: 'https://ngx-repository.firebaseio.com',
Expand All @@ -29,7 +28,7 @@ export function createFirestore(): Firestore {
messagingSenderId: '352664344689',
appId: '1:352664344689:web:20ec56387616cba621e3d0',
measurementId: 'G-0RD9MTX3PB'
}).firestore();
}));
}

@NgModule({
Expand Down

0 comments on commit aac103d

Please sign in to comment.