Skip to content

Latest commit

 

History

History
155 lines (107 loc) · 5.91 KB

File metadata and controls

155 lines (107 loc) · 5.91 KB

🧠 Memory App — System & Database Design

This repository is dedicated to tracking and organizing the system architecture and database design journey of the Memory App, a productivity tool that helps users save, categorize, and revisit personal or creative memories.

🎯 Objective: Design the entire backend architecture from scratch using Spring Boot with a strong emphasis on planning — including requirement gathering, data modeling, and API design.

🎨 UI Design


📚 Table of Contents


🛠 Requirement Analysis

✅ Core Features

  • User registration and login (Authentication & Authorization)
  • Create, view, edit, draft, delete memories (with text, images, or video)
  • Group memories into boards
  • Drag & drop UI to rearrange memories across boards
  • Calendar view for timeline-based visualization (optional)
  • Daily memory reminder notifications (“On this day…”) (optional)

🧰 Non-Functional Requirements

  • Secure media and user data handling
  • Modular, scalable, and maintainable backend
  • Media file upload support (Cloudinary / AWS S3)

📐 System Design

🔹 Overview

A layered architecture for separation of concerns:

  • Frontend (Mobile & Web)
  • Backend API (Spring Boot)
  • Database (Relational)
  • Media Storage (Cloudinary)
  • Scheduler/Notification Service (optional)

🧩 Components

  • Authentication Service (JWT-based)
  • Memory & Media Service
  • Board & Drag-n-Drop Service
  • Notification Scheduler (optional)
  • Calendar Module (optional)

📂 Design Process

  • High-Level Design (HLD): System architecture, modules, technology decisions
  • Low-Level Design (LLD): Class diagrams, service flow, database interaction patterns

🗃️ Database Design

  • Modeled to ensure data integrity, relationship consistency, and efficient querying.
  • Covers all core entities (Users, Memories, Boards, Media, Notifications, Tags)
  • Focus on normalization and performance.

📈 Diagrams

Diagram Type Description Status
System Architecture High-level overview of system components ✅ Added
Flowchart Diagram Flow of user actions within the system ✅ Added
Use Case Diagram Functionalities from user's perspective ✅ Added
Entity Relationship (ER) Database schema, tables and their relationships ✅ Added
Class Diagram Class-level interaction and structure (LLD) ✅ Added
API Flow Diagram Request/response and endpoint interactions ✅ Added

🛠 Tools Used: draw.io, Lucidchart

Architecture Diagram

Architecture Diagram

Flowchart Diagram

Symbols Reference

Symbol Name Function
🟠 Oval Start/End An oval represents a start or end point
➡️ Arrow Arrows A line is a connector that shows relationships between shapes
🔷 Parallelogram Input/Output A parallelogram represents input or output
▭ Rectangle Process A rectangle represents a process
🔶 Diamond Decision A diamond indicates a decision

Diagram

Flowchart

Use Case Diagram

Symbols Reference

Symbol / Shape Meaning
🧍 Actor A user or system that interacts with the system
🟦 System Boundary The entire application or a subsystem container
🔹 Use Case A specific action or functionality in the system
🔁 <<include>> Mandatory relationship: common behavior reused by multiple use cases
🧩 <<extend>> Optional behavior that extends a base use case
-> Association Line connecting an actor to a use case (interaction)

🖼 Use Case Diagram

Entity Relationship Diagram (ERD)

Two approaches are used:

  • The first diagram is a Conceptual ERD — focuses on entities and high-level relationships.
  • The second is a Logical ERD — includes attributes, primary/foreign keys, and relationship details.

Class Diagram

Api Flow Diagrams

Click to view each API flow diagram:

📃 License

This project is licensed under the MIT License.


✍️ Author

Built and maintained by Sana Gul — as part of a learning journey in full-stack system design and development.