Как будет структура получить следующую структуру данных из базы данных? - PullRequest
0 голосов
/ 15 января 2020

Это структура, которую я хочу получить из firebase, она запрашивает у меня интерфейс для форматирования ответа, это правильно или как бы правильно?

{
  "users":{
    "user1":{
        "username":"john",
        "full_name":"John Vincent",
        "created_at":"9th Feb 2015",
        "groups":{
            "group1":true,
            "group3":true
        }
        "last_logins":...
    },
    "user2": ...,
    "user3": ...
  }
  "groups": {
     "group1"{
        "group_name":"Administrators",
        "group_description":"Users who can do anything!",
        "no_of_users":2,
        "members":{
            "user1":true,
            "user3":true
        }
      },
     "group2"{
        "group_name":"Moderators",
        "group_description":"Users who can only moderate!",
        "no_of_users":1,
        "members":{
            "user2":true
        }
      }
   }
 }

это мой код. .. !!!

export interface Users {
    username: string;
    full_name: string;
    created_at: string;
    groups: any[];
}

export interface Group {
    group_name: string;
    group_description: string;
    no_of_users: Number;
    members: any[];
}
this.users = this.db.collection('users').snapshotChanges().pipe(
    map(actions =>
        actions.map(a => { const data = a.payload.doc.data() as Users; const id = a.payload.doc.id;
        return {id, ...data};
    }))
);

this.groups = this.db.collection('groups').snapshotChanges().pipe(
    map(actions =>
        actions.map(a => { const data = a.payload.doc.data() as Group; const id = a.payload.doc.id;
        return {id, ...data};
    }))
);

КАК СДЕЛАТЬ интерфейс и запросов для получения этой структуры из firebase ??

1 Ответ

1 голос
/ 15 января 2020

Вы можете использовать обобщенные c типы, чтобы создать что-то вроде этого:

export class FirebaseService<T> {

    constructor (collection: string) {
        this.dbInstance = fireDb //import
        this.collection = collection
    }
.
.
.
    async list(): Promise<T[]> { 
        return this.dbInstance 
            .collection(this.collection)
            .get()
            .then(async querySnapshot => { 
                const result: Array<T> = [];
                querySnapshot
                    .forEach(doc =>
                         result.push(doc.data())
                     ) 
                return result; 
            })
    }
}

И использовать это так

const service = new FirebaseService<User>('Users');
console.log(await service.list())

Таким образом, вы можете указать тип объекта и все еще иметь универсальный c и предсказуемый способ обработки ваших данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...