feat: Cloud Storage Integration Strategy & User Data Management #20
Labels
No labels
backend
bug
completed
documentation
duplicate
enhancement
feature
frontend
good first issue
help wanted
in-progress
invalid
performance
phase-1
Phase1
Phase2
Phase3
planning
question
refactor
security
test
testing
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Kalle/ATM#20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Background
Users want clarity on where their PDFs and media files are stored. They're asking about:
User Questions
Storage Provider Recommendations
Current Storage
~/.atm/uploads/(local filesystem)Proposed Solution
Phase 1: Storage Selection & Display (Immediate)
Objective: Show users where their files are stored and let them choose provider
UI Components:
Settings → Storage Configuration page
Upload Feedback
Phase 2: Cloud Storage Integration (v0.3.0 - High Priority)
Google Drive Integration (Recommended First):
Features:
Alternatives:
Phase 3: Admin Content on S3 (Advanced - v0.4.0 - Future)
Use Cases:
Implementation:
Technical Considerations
Storage Adapter Pattern
Database Schema Update
Privacy & GDPR Compliance
Acceptance Criteria
Phase 1 (Immediate)
Phase 2 (v0.3.0 - High Priority)
Phase 3 (v0.4.0 - Future)
Questions for Product Decision
Related Issues
✅ Phase 1 Complete: Storage Settings UI
I've successfully implemented the Storage Settings page for Phase 1 of Issue #20.
What Was Implemented
Storage Settings UI (in
src/app/[locale]/settings/page.tsx):Features
Current Storage Info
Cloud Provider Selection
User Experience
Code Added
645d9d2Next Steps (Phase 2 - v0.3.0)
Ready for Phase 2 implementation! 🚀
Status Update: Phase 1 & 2 Implemented
Phase 1: Storage Settings UI ✅ COMPLETE (commit
645d9d2)Phase 2: Google Drive OAuth ✅ IMPLEMENTED (commit
30b5458)Phase 3: S3 Admin Content ⏳ Future
Action Required
User Setup Needed: Google Cloud Console OAuth credentials must be configured:
See
GOOGLE_CLOUD_SETUP.mdfor step-by-step guide.Phase 2 Progress Update ✅
Commit:
c00e518| CI: Green ✅ | Coolify: running:healthy ✅Changes (5 files, +256/-42 lines)
src/lib/googleDrive.tsisConfigured()method - checks if NEXT_PUBLIC_GOOGLE_CLIENT_ID is setgetConnectionStatus()- returns{ connected, email? }via gapi profileGapiBasicProfileinterface to type declarationssrc/hooks/useStorage.tsisGoogleConnected,googleConnectionStatus,isGoogleConfiguredstateconnectGoogle()- loads API, signs in, switches provider to google_drivedisconnectGoogle()- signs out, reverts to localsrc/app/[locale]/settings/page.tsxany[]type onavailableVoicesstatesrc/components/FileUpload.tsx.env.google.exampleVerification
Still Open
Phase 3 Complete ✅
Commit:
1dd82c5| CI: Green ✅ | Coolify: deployed ✅Changes (7 files)
src/lib/storage-adapter.ts— AddedS3StorageAdapterclass:@aws-sdk/client-s3(PutObject, GetObject, DeleteObject, ListObjectsV2)static isConfigured()/static getBucketName()/static getRegion()'s3'to StorageProvider type + createStorageAdapter() factorysrc/hooks/useStorage.ts— Added's3'to valid provider checksrc/app/[locale]/settings/page.tsx— S3 (Admin) card in cloud providers grid with bucket/region statussrc/types/database.ts— Added's3'to storage_provider unionsrc/components/FileUpload.tsx— Added S3 to STORAGE_PROVIDER_LABELS.env.s3.example— Complete S3 config templatepackage.json— Added@aws-sdk/client-s3dependencyIssue #20 — ALL PHASES COMPLETE ✅