From b68b3e2126aabbe13d8e90b3b9ee8a0843182f99 Mon Sep 17 00:00:00 2001 From: Muhammed Kaplan Date: Mon, 29 Jan 2024 19:28:29 +0100 Subject: [PATCH] fix: tag module --- firebase.json | 5 +++- firestore.rules | 28 +++++++++++++++---- scripts/seed_emulator.ts | 3 ++ src/modules/tag/Tag.module.tsx | 49 +++++++++++++++++++++++---------- src/services/base.service.ts | 3 +- src/services/note.service.ts | 11 ++------ src/services/profile.service.ts | 8 +++--- 7 files changed, 71 insertions(+), 36 deletions(-) diff --git a/firebase.json b/firebase.json index 0222f9b..0c4d888 100644 --- a/firebase.json +++ b/firebase.json @@ -1,4 +1,7 @@ { + "firestore": { + "rules": "firestore.rules" + }, "emulators": { "auth": { "port": 9099, @@ -7,7 +10,7 @@ "firestore": { "port": 8080, "host": "0.0.0.0", - "rules": "firestore.rules" + "rules": "./firestore.rules" }, "ui": { "enabled": true diff --git a/firestore.rules b/firestore.rules index af2ab63..94a831a 100644 --- a/firestore.rules +++ b/firestore.rules @@ -1,14 +1,32 @@ rules_version = '2'; + + service cloud.firestore { match /databases/{database}/documents { - match /{document=**} { - allow read, write: if true; - } + match /notes/{note} { - allow read: if request.resource.data.expire_at < request.time; - allow write: if request.auth() + + allow read: if true; + allow write: if isUserAuthenticated() + } + + match /tags/{tag} { + allow read:if true; + allow write: if isUserAuthenticated() + } + + match /profiles/{profile} { + allow read:if true; + allow write: if isUserAuthenticated() && request.path == request.auth.uid + } + + + /* Functions */ + + function isUserAuthenticated() { + return request.auth.uid != null; } } } \ No newline at end of file diff --git a/scripts/seed_emulator.ts b/scripts/seed_emulator.ts index 42f985b..9820b1b 100644 --- a/scripts/seed_emulator.ts +++ b/scripts/seed_emulator.ts @@ -92,6 +92,9 @@ const profilesSeeder = async () => { firstName: faker.person.firstName(), lastName: faker.person.lastName(), profileImageRef: faker.image.avatar(), + socialMediaAccounts: { + twitter: faker.internet.userName(), + }, }); console.log("Profile seeded"); diff --git a/src/modules/tag/Tag.module.tsx b/src/modules/tag/Tag.module.tsx index fee997c..de16111 100644 --- a/src/modules/tag/Tag.module.tsx +++ b/src/modules/tag/Tag.module.tsx @@ -4,8 +4,20 @@ import styles from "@/pages/Tag/Tag.module.scss"; import { noteService } from "@/services/note.service"; import { profileService } from "@/services/profile.service"; import { tagService } from "@/services/tag.service"; -import { IonItem, IonLabel, IonList, IonSpinner, IonText } from "@ionic/react"; +import { + IonIcon, + IonItem, + IonLabel, + IonList, + IonSpinner, + IonText, +} from "@ionic/react"; import { useQuery } from "@tanstack/react-query"; +import { + logoTwitter, + mailOpenOutline, + phonePortraitOutline, +} from "ionicons/icons"; import { useMemo } from "react"; import { Redirect } from "react-router"; @@ -84,6 +96,7 @@ export default function TagModule(props: TagDetailPageProps) { +

Phone

@@ -92,6 +105,8 @@ export default function TagModule(props: TagDetailPageProps) { + +

Email

@@ -99,20 +114,24 @@ export default function TagModule(props: TagDetailPageProps) {
- - -

Website

-
- - www.yoursite.com - -
-
-
+ + {profileData?.socialMediaAccounts?.twitter && ( + + + +

Twitter

+
+ + {profileData.socialMediaAccounts.twitter} + +
+
+
+ )} ); diff --git a/src/services/base.service.ts b/src/services/base.service.ts index 4b289a3..80ab431 100644 --- a/src/services/base.service.ts +++ b/src/services/base.service.ts @@ -1,7 +1,6 @@ import { FirebaseCollections } from "@/models/firebase_collections.model"; import { CollectionReference, - DocumentData, Firestore, PartialWithFieldValue, QueryDocumentSnapshot, @@ -18,7 +17,7 @@ export class BaseService { this.collectionRef = collection(this.db, collectionReference); } - protected converter() { + protected converter() { return { toFirestore: (data: PartialWithFieldValue) => data, fromFirestore: (snap: QueryDocumentSnapshot): T => snap.data() as T, diff --git a/src/services/note.service.ts b/src/services/note.service.ts index 3e2d12e..ad412b9 100644 --- a/src/services/note.service.ts +++ b/src/services/note.service.ts @@ -1,13 +1,6 @@ import { FirebaseCollections } from "@/models/firebase_collections.model"; import { INote } from "@/models/note.model"; -import { - getDocs, - limit, - orderBy, - query, - startAt, - where, -} from "firebase/firestore"; +import { getDocs, limit, orderBy, query, where } from "firebase/firestore"; import { BaseService } from "./base.service"; class NoteService extends BaseService { @@ -20,7 +13,7 @@ class NoteService extends BaseService { this.collectionRef, orderBy("created_at", "desc"), where("userUid", "==", userUid), - startAt("expire_at", new Date()), + where("expire_at", "==", new Date()), limit(1) ).withConverter(this.converter()); diff --git a/src/services/profile.service.ts b/src/services/profile.service.ts index d317f54..347072e 100644 --- a/src/services/profile.service.ts +++ b/src/services/profile.service.ts @@ -1,6 +1,6 @@ import { FirebaseCollections } from "@/models/firebase_collections.model"; import { IUser } from "@/models/user.model"; -import { doc, getDoc } from "firebase/firestore"; +import { DocumentSnapshot, doc, getDoc } from "firebase/firestore"; import { BaseService } from "./base.service"; class ProfileService extends BaseService { @@ -8,9 +8,9 @@ class ProfileService extends BaseService { super(FirebaseCollections.Profiles); } - fetchProfile(userUid: string) { - const docRef = doc(this.collectionRef, userUid).withConverter( - this.converter() + fetchProfile(userUid: string): Promise> { + const docRef = doc(this.collectionRef, userUid).withConverter( + this.converter() ); try {