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
-
-
-
+
+ {profileData?.socialMediaAccounts?.twitter && (
+
+
+
+ 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 {