Giter Club home page Giter Club logo

lynnemunini / book-shelf Goto Github PK

View Code? Open in Web Editor NEW
65.0 2.0 9.0 19.25 MB

BookShelf App is an Android application that lets users search for books, view book details, leave reviews, add books to favorites, and view example categories of books. The app uses Firebase's Firestore database service to store user and book data and the Google Books API to search for books and retrieve book data.

License: GNU General Public License v3.0

Kotlin 100.00%
android bookshelf firebase

book-shelf's Introduction

BookShelf App

BookShelf is an Android app that allows users to search for books, view book details, leave reviews, add books to favorites, and view example categories of books. The app uses Firestore, a No-SQL database service provided by Google, to store user and book data. The app also uses the Google Books API to search for books and retrieve book data.

Bugs and Issues

Please note that the app is currently under development and bugs may be present. Bug reports and suggestions are welcome. The app also requires active internet connection to function properly.

Features

  • Search for books using the Google Books API
  • View book details, including the cover image, author, and description
  • Leave reviews for books
  • Add books to favorites for quick access later
  • Browse example categories of books
  • Authenticate using email/password or Google authentication
  • Upload a profile image from the device gallery

Future Features (not yet implemented):

Feature Description Status
Dark Mode ๐ŸŒ‘ Add a dark mode theme to the app โœ… Completed
Book Recommendations ๐Ÿ“š Add a feature that recommends books based on user preferences โณ Not Started
Social Sharing ๐Ÿค Add a feature that allows users to share books with friends โณ Not Started
Bookshelf ๐Ÿ“– Add a feature that allows users to create their own bookshelves โณ Not Started
Book Clubs ๐Ÿ“š๐Ÿ‘ฅ Add a feature that allows users to create book clubs โณ Not Started
Notifications ๐Ÿ”” Add a feature that notifies users of new books, reviews, and other events โณ Not Started
Multilingual Support ๐ŸŒ Add support for multiple languages โณ Not Started
Offline Mode ๐Ÿ“ด Add support for offline mode โณ Not Started

Database

The app utilizes Firestore, a document-based database, which allows for more flexibility and scalability in terms of data organization and querying.

JSON Data

In order to help with understanding the data structure and organization of the app, a sample of the JSON data used in the app is provided below

JSON data structure

Click to expand
{
  "users": [
    {
      "displayName": "",
      "user_id": "",
      "avatar": "",
      "shelves": [
        {
          "name": "Reading",
          "books": [
            {
              "book_id": 1,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            },
            {
              "book_id": 2,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            }
          ]
        },
        {
          "name": "Have Read",
          "books": [
            {
              "book_id": 1,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            },
            {
              "book_id": 2,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            }
          ]
        },
        {
          "name": "To Read",
          "books": [
            {
              "book_id": 1,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            },
            {
              "book_id": 2,
              "title": "",
              "author": "",
              "summary": "",
              "cover_image": ""
            }
          ]
        }
      ],
      "search_history": [
        "book_id1",
        "book_id2"
      ],
      "reviews": [
        {
          "book": {
            "book_id": 1,
            "title": "",
            "author": "",
            "summary": "",
            "cover_image": ""
          },
          "rating": 4.5,
          "review_text": ""
        },
        {
          "book": {
            "book_id": 2,
            "title": "",
            "author": "",
            "summary": "",
            "cover image": ""
          },
          "rating": 4.5,
          "review_text": ""
        }
      ],
      "favourites": [
        {
          "book_id": 1,
          "title": "",
          "author": "",
          "summary": "",
          "cover_image": ""
        },
        {
          "book_id": 2,
          "title": "",
          "author": "",
          "summary": "",
          "cover_image": ""
        }
      ]
    }
  ]
}

Diagram Representation of the JSON Data Structure

Diagram

Authentication

The app uses Firebase Authentication to handle user authentication. The app uses email/password authentication and Google authentication.

Technologies Used

Technologies Used:

  • Firebase: The app utilizes Firebase's services, including Firebase Authentication, Firestore, and Firebase Analytics, to manage user authentication, store data, and track user behavior and usage.
  • Google Books API: The app uses the Google Books API to search for books and retrieve book data.
  • Dagger-Hilt: The app uses Dagger-Hilt, a dependency injection library, to manage dependencies and provide instances of objects throughout the app.
  • Kotlin Coroutines: The app uses Kotlin Coroutines, a concurrency framework, to manage asynchronous operations and background tasks in a structured and organized way.
  • Retrofit: The app uses Retrofit, a networking library, to make API requests and receive responses from external APIs.
  • GSON Converter: The app uses GSON Converter, a data conversion library, to convert JSON data received from API responses into Kotlin objects for easier handling.
  • Coil: The app uses Coil, an image loading and caching library, to load and display images in the app.
  • OkHttp: The app uses OkHttp, a networking library, to handle HTTP requests and responses.
  • Preferences Datastore: The app uses Preferences Datastore, a data storage library, to store user preferences and settings in a persistent and organized way.
  • LiveData: The app uses LiveData, an Android Architecture Component, to handle data changes and updates in a lifecycle-aware way.
  • Jetpack Compose: The app uses Jetpack Compose, a modern UI toolkit, to build the UI of the app.

Installation

To install the app, clone the repository and open the project in Android Studio. The app can be run on an emulator or a physical device.

Screenshots

License

This project is licensed under the GNU GENERAL PUBLIC LICENSE - see the LICENSE file for details.

Acknowledgements

Contact

If you have any questions or suggestions, feel free to contact me on Twitter or LinkedIn. You can also raise an issue on the repository.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Support

If you like the project, please consider supporting it by giving it a star โญ๏ธ.

book-shelf's People

Contributors

greatgrant avatar lynnemunini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

book-shelf's Issues

Error when trying to create a new user with an email address that is already in use

Description:
When attempting to create a new user with an email address that is already in use, the app throws a com.google.firebase.auth.FirebaseAuthUserCollisionException with the message "The email address is already in use by another account." This occurs in the createUserWithEmailAndPassword function of the LoginScreenViewModel class.

Steps to Reproduce:

  1. Attempt to create a new user with an email address that is already in use
  2. Observe the error message and crash of the app

Expected Result:
The app should display a message to the user informing them that the email address is already in use, and prompt them to try a different email or sign in with an existing account.

Actual Result:
The app crashes and throws the mentioned exception.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.