Skip to content

Latest commit

 

History

History
62 lines (42 loc) · 3.06 KB

README.md

File metadata and controls

62 lines (42 loc) · 3.06 KB

GORM Golang Project

This project demonstrates a Golang application utilizing GORM for ORM and implementing tests for the functionalities.

Introduction

GORM is a powerful ORM library for Go, designed to simplify database operations and streamline development workflows. This project demonstrates various GORM features and best practices through a simple yet comprehensive example application.

Project Structure

The project consists of the following files:

  • db.go: Contains the implementation of the database connection using the singleton design pattern.
  • main.go: Defines the main functionalities of the application.
  • main_test.go: Contains test cases for the implemented functionalities.
  • go.mod and go.sum: Files generated by Go modules to manage dependencies.

Database Setup

The project connects to a PostgreSQL database. Modify the connection parameters (user, password, host, port, dbname) in db.go according to your PostgreSQL setup.

Functionality

  • GetConnection(): Establishes a connection to the database using the singleton pattern.
  • RefreshDatabase(): Refreshes the database by dropping existing tables and recreating them.
  • SeedUser(): Seeds the database with user data, including calendars and appointments.
  • UserWithRangeAppointmentScope(): Defines a scope to retrieve users with appointments within a specified date range and calendar name.
  • UpdateAppointment(): Updates appointment start time and description based on calendar name and keyword.

Test Cases

  • TestDatabaseConnectionAndAutoMigrate(): Tests the database connection and auto-migration of tables.
  • TestUserTable(), TestCalendarTable(), TestAppointmentTable(), TestTaskListTable(): Tests the structure of each database table.
  • TestUserCalendarRelationship(), TestCalendarAppointmentRelationship(), TestTaskListAppointmentRelationship(), TestUserAppointmentRelationship(): Tests the relationships between database tables.
  • TestRefreshDatabase(): Tests the refresh database functionality.
  • TestSeedUser(): Tests the seed user functionality.
  • TestUserWithRangeAppointmentScope(): Tests the user appointment scope functionality.
  • TestUpdateAppointment(): Tests the update appointment functionality.

Database Relationships

  • Each user has a calendar, and each calendar belongs to a user.
  • Each user can have several appointments, and each appointment can have several users (through the appointment_user table).
  • Each calendar can have several appointments.
  • Each task list can have several appointments.
  • Whenever an appointment belongs to a calendar or task list.

Setup

  1. Clone the repository: git clone <repository-url>
  2. Navigate to the project directory: cd <project-directory>
  3. Modify the database connection parameters in db.go if necessary.
  4. Run the tests: go test -v

Requirements

  • Go 1.16 or higher
  • PostgreSQL database

Note

This project was inspired by the need for a practical guide to working with GORM in Golang. it's a good starting point for learning about GORM and getting familiar with its features.