Skip to content

byavuz5/messaging-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Messaging Service

Proje örnek bir mesajlaşma uygulamasının servislerini içeriyor. Golang ile oluşturulmuş servislerin docker ile image haline getirilip, AWS Lambda üzerinde çalıştırılmasını sağlıyor. Projede veritabanı olarak DynamoDB kullanılmıştır.


AWS CDK İçeriği

Uygulamanın çalışması için gerekli olan sistemi AWS tarafında ayağa kaldırıyor.

  • API Gateway oluşturulması.
  • Servislerin kullanacağı DynamoDB tablolarının oluşturulması.
  • Lambda servislerinin oluşturulması ve ilgili tablolara erişimi için izinlerin eklenmesi.
  • API Gateway'e resource eklenmesi ve ilgili lambda servislerinin bu resource'a bağlanması.

CI/CD İçeriği

Git repository'sine push işlemi geldiğinde Github Action iş akışı tetikleniyor ve ilk olarak docker ile golang servislerinden build alıp, docker image'lerini oluşturuyor. Daha sonra bu image'leri AWS ECR servisine gönderiyor. Tüm build ve gönderme işlemleri bittikten sonra AWS CDK ile yeni image'ler ile lambda servislerini güncelliyor.


Servisler

  • [POST] /createAccount

Kullanıcıların hesap oluşturmasını sağlıyor. Parametre olarak username(String) ve password(String) JSON objesi alıyor. Çıktı olarak bilgi ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /login

Kullanıcıların sisteme giriş yapmasını sağlıyor. Parametre olarak username(String) ve password(String) JSON objesi alıyor. Çıktı olarak bilgi ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /sendMessage

Kullanıcıların başka bir kullanıcıya mesaj göndermesini sağlıyor. Parametre olarak sender(String), sent_to(String) ve message(String) JSON objesi alıyor. Çıktı olarak bilgi ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /getAllMessages

Kullanıcıların tüm kullanıcılara gönderdiği ve aldığı mesajların geçmişini listeleliyor. Parametre olarak username(String) JSON objesi alıyor. Çıktı olarak, tarihe göre sıralı bir şekilde mesajı gönderen kişi, mesaj içeriği ve gönderildiği tarihi ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /getContactMessages

Kullanıcıların belirli bir kullanıcıya gönderdiği ve aldığı mesajların geçmişini listeliyor. Parametre olarak username(String) ve contactName(String) JSON objesi alıyor. Çıktı olarak, tarihe göre sıralı bir şekilde mesajı gönderen kişi, mesaj içeriği ve gönderildiği tarihi ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /getActivityLogs

Kullanıcıların gerçekleştirdiği aktiviteleri listeliyor. Parametre olarak username(String) JSON objesi alıyor. Çıktı olarak, kullanıcıların gerçekleştirdiği aktiviteleri ya da hata mesajı içeren JSON objesi dönüyor.

  • [POST] /getSystemLogs

Sistemin çalışmasını engelleyen hata mesajlarının listelenmesini sağlıyor. Parametre olarak service_name(String) JSON objesi alıyor. Çıktı olarak servisin aldığı hatalar ya da hata mesajı içeren JSON objesi dönüyor.


Örnek Servis Uygulamaları

  • [POST] /createAccount
  • Girdi : {"username":"ahmet", "password":"12345"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": {
             "message": "User created, username: ahmet"
            },
        "errors": null
       }
  • [POST] /login
  • Girdi : {"username":"ahmet", "password":"12345"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": {
             "message": "Success login, username: ahmet"
            },
        "errors": null
       }
  • [POST] /sendMessage
  • Girdi : {"sender":"ahmet", "sent_to":"mehmet", "message":"Selam"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": {
             "message": "Message sended."
            },
        "errors": null
       }
  • [POST] /getAllMessages
  • Girdi : {"username":"ahmet"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": [
            {
             "sender": "ahmet",
             "message": "Selam",
             "room_id": "ahmet-mehmet",
             "createdAt": "2022-08-30 12:50:46.650564835 +0000 UTC"
            }
           ],
        "errors": null
       }
  • [POST] /getContactMessages
  • Girdi : {"username":"ahmet", "contactName":"mehmet"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": [
            {
             "sender": "ahmet",
             "message": "Selam",
             "room_id": "ahmet-mehmet",
             "createdAt": "2022-08-30 12:50:46.650564835 +0000 UTC"
            },
            {
             "sender": "mehmet",
             "message": "Selam",
             "room_id": "ahmet-mehmet",
             "createdAt": "2022-08-30 14:40:10.999917592 +0000 UTC"
            }
           ],
        "errors": null
       }
  • [POST] /getActivityLogs
  • Girdi : {"username": "ahmet"}
  • Çıktı : {
         "statusCode": 200,
         "headers": {
             "Content-Type": "application/json"
         },
         "body": [
            {
             "username": "ahmet",
             "activity": "Invalid login.",
             "createdAt": "2022-08-30 09:09:10.1895531 +0000 UTC"
            },
            {
             "username": "ahmet",
             "activity": "Success login.",
             "createdAt": "2022-08-30 09:09:21.706084 +0000 UTC"
            },
            {
             "username": "ahmet",
             "activity": "Send message to mehmet.",
             "createdAt": "2022-08-30 12:50:46.897679742 +0000 UTC"
            },
            {
             "username": "ahmet",
             "activity": "List all messages.",
             "createdAt": "2022-08-30 12:51:09.400160502 +0000 UTC"
            },
            {
             "username": "ahmet",
             "activity": "List messages with mehmet.",
             "createdAt": "2022-08-30 12:52:15.904514812 +0000 UTC"
            },
            {
             "username": "ahmet",
             "activity": "List activity logs.",
             "createdAt": "2022-08-30 12:52:38.87719108 +0000 UTC"
            },
            ],
        "errors": null
       }
  • [POST] /getSystemLogs
  • Girdi : {"service_name":"login"}
  • Çıktı : {
        "statusCode": 200,
        "headers": {
              "Content-Type": "application/json"
             },
        "body": [
            {
             "service_name": "login",
             "err_message": "ValidationException: One or more parameter values are not valid. The AttributeValue for a key attribute cannot contain an empty string value. Key: username\n\tstatus code: 400, request id: FERPDNK0F1D7PCRA228R7DMUHBVV4KQNSO5AEMVJF66Q9ASUAAJG",
             "createdAt": "2022-08-30 09:35:07.135860794 +0000 UTC"
            }
           ],
        "errors": null
       }

Veritabanı Tasarımı

  • users table

    | username(String) PK | password(String) | createdAt(String)                     |
    | ------------------- | ---------------- | ------------------------------------- |
    | ahmet               | 1234             | 2022-08-27 15:58:03.7699622 +0000 UTC |
    
  • messages table

    | sender(String) PK   | message(String)  | room_id(String) | createdAt(String) SK                  |
    | ------------------- | ---------------- | --------------- | ------------------------------------- |
    | ahmet               | Selam            | ahmet-mehmet    | 2022-08-28 09:50:38.3772013 +0000 UTC |
    
  • activity_logs table

    | username(String) PK | activity(String) | createdAt(String) SK                  |
    | ------------------- | ---------------- | ------------------------------------- |
    | ahmet               | Success login.   | 2022-08-28 09:54:03.9708315 +0000 UTC |
    
  • system_logs table

    | service_name(String) PK | err_message(String)                                     | createdAt(String) SK                  |
    | ----------------------- | ------------------------------------------------------- | ------------------------------------- |
    | createAccount           | ResourceNotFoundException: Requested resource not found | 2022-08-27 18:12:43.4048887 +0000 UTC |
    

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published