Skip to content

The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat

Notifications You must be signed in to change notification settings

zurichat/zc_core

Repository files navigation

ZC_CORE Go Reference

Zuri Chat Core Api

See the docs for everything: Zuri Chat Documentation

GitHub repo size

Description

The Zuri Chat Core (ZC_Core) is an open source API that serves as the backend and backbone of Zuri Chat - an open source slack clone developed during the HNG8 internship program

Zuri Chat implements a plug-in system that allows for much more functionality because different plugins can be developed by different creators. These plugins can then rest on the Zuri Chat Core backbone (ZC_Core) which is written in Golang

Language

ZC_Core was written in Go because it is a fast, compiled language and it is easily scaled. Concurrency in Go is also ideal for implementing a plugin structure. This makes it easy to build on the project and allows for future expansion.

API Documentation

A list of the endpoints and the functions they implement can be found here detailing information about the all API resources.

Getting Started

This is an example of how you can setup your project locally. To get a local copy up and running follow these simple example steps.

Prerequisites

  1. Go 1.16 or lastest version already installed on your local machine.
  2. MongoDB

Installation

  1. Run an instance of MongoDB
$ mongod
  1. Create and populate a .env file with its keys corresponding values as listed in example.env
  2. Run zc_core from project root directory
$ cd /path/to/zc_core
$ go run main.go

Testing

  1. Lint checks are done with golangci-lint - an aggregator of linters
$ cd /path/to/zc_core
$ golangci-lint run --timeout 2m
  1. Automated unit and integration tests done with golang's builtin testing package.
$ go test -v ./...  -cover

Features

  • Blog: Content management package for the CRUD of blog posts and associated services
  • Contact: Service to process all user-related inquiries, complaints, and service-related suggestions
  • Data: Data management for plugins
  • Docs: OpenAPI specification for all resources
  • External: Desktop application download, email subscriptions, etc...
  • Marketplace: Plugins marketplace
  • Messaging: Realtime messaging service with SocketIO
  • Organizations: Organization management system
  • Plugin: Plugin management system
  • Realtime Communication (RTC): Connection authentication, subcription and pulishing service with centrifugo proxy server
  • Report: Report generation and viewing service
  • Services: Mail and file upload service package
  • Users: User management system
  • Utils: Utility package of shared helper functions and data types

Contributing

Pull requests are welcome from the zc_core_main team. Please review the issues created before making a pull request or create an issue if the issue you solve is not already listed.

  1. Fork/Clone the Project
  2. Create your Feature Branch (git checkout -b [branch name])
  3. Lint your Changes (golangci-lint run --timeout 2m)
  4. Commit your Changes (git commit -m "Added some amazing features")
  5. Push to the Branch (git push origin [branch name])
  6. Open a Pull Request