FameTech
Buy data bundles, airtime, mashup, WAEC Results Checkers, AFA Registrations & access our Developer API. Fast, secure digital services in Ghana.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Plateforme multi-entreprise : chaque responsable crée son entreprise (nom, logo, pays, devise) et gère sa propre vitrine ; l'administrateur de la plateforme valide, suspend ou bannit les entreprises. État : backend, site web (inscription, connexion, modération, espace du responsable : produits, commandes, messages, promotions, équipe, boutiques, notifications), vitrine publique et début de l'application mobile. À venir : actualités et pages, notifications sur téléphone.檢視完整 README ↗
Plateforme multi-entreprise : chaque responsable crée son entreprise (nom, logo, pays, devise) et gère sa propre vitrine ; l'administrateur de la plateforme valide, suspend ou bannit les entreprises.
État : backend, site web (inscription, connexion, modération, espace du responsable : produits, commandes, messages, promotions, équipe, boutiques, notifications), vitrine publique et début de l'application mobile. À venir : actualités et pages, notifications sur téléphone.
mobile/)Expo (React Native), pour le responsable et son équipe : connexion, accueil, commandes, messages.
L'API reconnaît une application grâce à l'en-tête X-Client: mobile : elle renvoie alors les jetons
dans le corps de la réponse (au lieu de cookies) et accepte Authorization: Bearer. Le site web
n'est pas affecté.
cd mobile
npm install
npx expo start # scanner le QR code avec l'application Expo Go (même wifi que le PC)
Par défaut l'application parle à l'API en ligne ; pour un serveur local :
EXPO_PUBLIC_API_URL=http://<adresse-du-pc>:3101/api npx expo start.
Vitrine : /<adresse-de-l-entreprise> (ex. /demo). Pour un déploiement derrière des relais
(Vercel → Render), régler TRUST_PROXY côté API selon le nombre de relais, sinon l'anti-spam
verrait la même adresse pour tous les visiteurs.
/api/b/:slug/... (ex. /api/b/demo/products).PENDING et invisible du public ; elle peut
préparer son catalogue. Statuts : PENDING, ACTIVE, REJECTED, SUSPENDED, BANNED.src/tenancy/. Une extension Prisma ajoute
businessId à chaque requête sur les tables d'entreprise, l'impose à chaque création, et
refuse de fonctionner si l'entreprise n'est pas identifiée (échec fermé). Les services métier
n'ont pas à filtrer eux-mêmes. Un nouveau modèle d'entreprise doit être ajouté à TENANT_MODELS.PLATFORM_ADMIN (modération), OWNER / GESTIONNAIRE / EDITEUR (personnel d'une
entreprise), CUSTOMER (client). Le personnel est isolé explicitement dans UsersService.cd backend
cp .env.example .env # renseigner DATABASE_URL, secrets JWT, SEED_PLATFORM_ADMIN_*
npm install
npx prisma migrate deploy
npm run prisma:seed # rôles, permissions, compte plateforme
npm run db:seed:demo # (dev uniquement) entreprise « demo »
npm run start:dev
cd frontend
cp .env.local.example .env.local # BACKEND_ORIGIN = adresse de l'API
npm install
npm run dev # http://localhost:3100
Le navigateur n'appelle jamais l'API directement : il passe par /api sur le site, relayé par Next
(next.config.mjs), ce qui garde les cookies de session « premier parti ».
Trois services, tous avec un plan gratuit :
-pooler) : c'est DATABASE_URL. (Render n'autorise qu'une base gratuite par
compte, d'où une base externe.)render.yaml). Renseigner les variables
demandées : DATABASE_URL, SEED_PLATFORM_ADMIN_EMAIL, SEED_PLATFORM_ADMIN_PASSWORD (10
caractères min., ce compte peut valider et bannir toute entreprise), CLOUDINARY_URL
(cloudinary://CLE:SECRET@NOM — valeur exacte), CORS_ORIGIN (adresse du site Vercel).
Vérifier ensuite https://<api>.onrender.com/api/health/db.frontend, variable BACKEND_ORIGIN =
adresse de l'API Render (sans /api).Points à vérifier après le premier déploiement :
TRUST_PROXY (2 par défaut = Vercel puis Render) : depuis deux réseaux différents, envoyer
quelques messages de contact et contrôler que la limite anti-spam s'applique par visiteur et non
pour tout le monde./api/health/db (ex. UptimeRobot, toutes les 5 min) l'évite.[email protected] tant qu'aucun domaine n'est vérifié chez Resend.npm test # unitaires
npm run test:e2e # intégration : vraie base PostgreSQL « boutik_test » (effacée à chaque lancement)
Le test test/isolation.e2e-spec.ts prouve qu'une entreprise ne peut ni lire, ni modifier, ni
supprimer les données d'une autre, et couvre inscription, modération et signalements.