Skip to content
Salm Doo edited this page Nov 21, 2023 · 13 revisions

Restaurant Near To Me

The application allows the users to review restaurants near their location such as the rating, services, foods… It also allows users to review their favorite choices, and the best recommendations, make a reservation, and book a dish of a restaurant in a convenient way.

Main features

  1. Search and review restaurant information
  2. Set favorite for restaurant and dish
  3. Reserve at a favorite restaurant
  4. Book a dish from a restaurant
  5. View the restaurant location on the map

Screenshots

Simulator Screenshot - iPhone 14 Pro - 2023-11-17 at 06 21 01 Simulator Screenshot - iPhone 14 Pro - 2023-11-17 at 06 24 47 Simulator Screenshot - iPhone 14 Pro - 2023-11-20 at 09 03 24 Simulator Screenshot - iPhone 14 Pro - 2023-11-17 at 06 49 33
Simulator Screenshot - iPhone 14 Pro - 2023-11-20 at 08 57 45 Simulator Screenshot - iPhone 14 Pro - 2023-11-20 at 09 03 40 Simulator Screenshot - iPhone 14 Pro - 2023-11-20 at 09 05 42

System Overview Activity Diagram

Screenshot 2023-11-21 at 8 33 43 AM

The diagram offers a comprehensive overview of the primary system activities, emphasizing key processes and interactions.

  • Users have access to numerous features without requiring login.
  • Login prompts are selectively introduced, specifically when users initiate reservation bookings or place orders.
  • The system adeptly supports customers through the payment process, enhancing the user journey and system functionality.

High level architechture

level architecture

Apply Vertical Slice Architecture to build the application. Componentization distinguishes meal and meal details, allowing independent modifications

  • Model: Pure structs define object attributes, with the option to implement the DecodeDataProtocol for decoding data when necessary.
  • View: Employs a ViewModel, injecting a suitable protocol to retrieve and present essential data on the screen.
  • ViewModel: Receives a FetchProtocol from the View, utilizes the fetchData() method to obtain results, processes the outcomes, and publishes the final result to the views.
  • DataFetcher: Defines logic related to data retrieval, implementing the FetchProtocol to retrieve data from various sources, including external systems, RESTful APIs, or local storage

Architecture pattern - MVVM

Screenshot 2023-11-21 at 8 01 30 AM

This activity diagram illustrates a modular and scalable system architecture

  • Each feature is encapsulated within its dedicated model and service protocol.
  • The protocols efficiently access data from diverse resources, supporting seamless testing through the integration of mock data.
  • Multiple views capable of sharing a common view model tailored to their specific purposes, that emphasize a flexible design.
  • Services within the system exhibit a unified approach, utilizing a shared generic class to enhance code reusability and maintainability.

Non-functional requirements

  • Optimized for Efficiency and Scalability: Utilizing Vertical Slice Architecture, generic classes, and adhering to POP principles ensures a robust, easily expandable, and test-friendly code structure.
  • Highly code reusable, performs consistently in the system: Employing POP and MVVM architecture ensures maximum code reuse and consistent performance. Modern async/await pattern manages asynchronous API requests seamlessly.
  • High-Level Security: Utilize the keychain technology to safeguard user-sensitive information. Prior to storage, a rigorous encryption process is applied to ensure the protection and confidentiality of the stored data.

Test Coverage

Screenshot 2023-10-24 at 7 22 07 AM

Technologies applied

  • Language: Swift, SwiftUI
  • Platform: IOS
  • Design pattern: MVVM, Singleton, Delegate and Observation
  • Framework: SwiftUI, UIKit, MapKit, Core Data, Core Location, Combine
  • Web services/Notification: RESTful, JSON, Async/Await
  • Third-party: SDWebImage
  • Security: Keychain, JWT
  • Multi threads: Task, DispatchQueue, MainActor
  • Testing: unit test - XCTest (TDD), XCUITest