/task-for-dell

Primary LanguageGoMIT LicenseMIT

Blog and News API

This project is a Golang-based API using the Echo framework and Postgres database for managing and serving Blogs and News content.

Table of Contents

Features

  • Create, read, update, and delete blogs and news articles.
  • Postgres yordamida doimiy saqlash.
  • Swagger UI.
  • Docker.
  • CI/CD by Github Actions.
  • Test coverage
    • 100% in repository
    • 100% in UseCases
    • 78.9% in Handlers

Prerequisites

Tool & Technologies

List of tools and technologies used:

  • echo - Web framework
  • swag - Swagger
  • sqlx - Extensions to database/sql.
  • pgx - PostgreSQL driver and toolkit for Go
  • viper - Go configuration with fangs
  • zap - Logger
  • validator - Go Struct and Field validation
  • migrate - Database migrations. CLI and Golang library.
  • gomock - Mocking framework
  • testing - Testing
  • require - Checking test result
  • Docker - Docker
  • Database - PostgreSQL

Installation

1. Clone the repository:

git clone https://github.com/realtemirov/task-for-dell.git
cd task-for-dell

2. Install dependencies:

go mod download

Configuration

Before running the application, configure the necessary environment variables. Enter the configuration folder and configure the environment you want.

cd config
nano config-local.yml

Usage

1. Run the application with docker-compose:

docker compose up -d            // run containers with docker-compose

2. Run the application with container:

make start                      // run postgres container and migration-up
make run                        // run app

3. Run Local app:

go run cmd/main.go              // equal -> make run

4. Run Test:

make test

5. Swagger UI

http://localhost:8000/swagger/index.html

API Endpoints

  • Create a Blog/News Content

    POST /v1/blogs

    {
      "title": "Sample Title",
      "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    }

    POST /v1/news

    {
      "title": "Sample Title",
      "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    }
  • Update Content by ID

    PUT /v1/blogs/:id

    {
      "title": "Sample Title",
      "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    }

    PUT /v1/news/:id

    {
      "title": "Sample Title",
      "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    }
    
  • Delete Content by ID

    DELETE /v1/blogs/:id

    DELETE /v1/news/:id

  • Get Content by ID

    GET /v1/blogs/:id

    GET /v1/news/:id

  • GetAll Contents

    GET /v1/blogs

    GET /v1/news

License

This project is licensed under the MIT License.

Feedback and Support

For any issues, feedback, or support, please open an issue on GitHub.