library-utils 0.1.9
A collection of utility functions for AWS services
Requires Python: >=3.6

==============================================
   x24142816 Remote worktime tracker Guide
==============================================

This document provides an overview of the dependencies, setup, and deployment
steps. 
And thiw project interacts with AWS services such as S3, DynamoDB, SQS, SNS,
and CloudWatch.

---------------------------------------------------------
    1. Required Dependencies
---------------------------------------------------------

Ensure you have Python 3.6+ installed.

To install the required dependencies, run:

    pip install -r requirements.txt

List of dependencies:

    boto3==1.37.8
    botocore==1.37.8
    Django==4.2.19
    setuptools==59.6.0
    gunicorn==23.0.0
    Pillow==11.1.0

(Note: The `requirements.txt` file is located in the project's root directory.)

---------------------------------------------------------
    2. utils > library 
---------------------------------------------------------
# utils - AWS Utilities Library.

`utils` is a Python library that provides various utility functions to interact 
with AWS services such as S3, DynamoDB, SQS, and CloudWatch.

## Features

### **CloudWatch**
- Create log groups and streams 
- write logs to CloudWatch for monitoring authentication attempts
- Track login failures and store security-related logs
### **DynamoDB**
- Save user information (ID, email, phone_number, etc..)
- Store and retrieve worksession data, including timestamps and overtime
### **S3**
- Upload user profile pictures and store them securely in an S3 bucket
### **SQS**
- Send asynchronous messages to an SQS queue
### **SNS**
- Send event-driven notifications to administrators

## Installation

You can install this library using `pip`:
    

    pip install library-utils

## How to Use (Call Functions)
To use this library in Python, import the required module:

    from time_tracker.utils.<module_name> import <function_name>

---------------------------------------------------------
    3. Application Setup & Execution
---------------------------------------------------------
### **Clone the Repository**
    
    git clone https://github.com/Jiyoung0716/Final_CPP_Project.git
    cd Final_CPP_Project

For macOS/Linux:
    
    python -m venv env
    source env/bin/activate

For Windows:

    python -m venv env
    env\Scripts\activate

### **Install Dependencies**
    
    pip install -r requirements.txt

### env file** (store sensitive credentials):

    AWS_REGION=us-east-1
    S3_BUCKET_NAME=x24142816-s3bucket
    DYNAMODB_TABLE_USERS=Users
    DYNAMODB_TABLE_WORKTIME=Worktime
    DYNAMODB_TABLE_PROJECTS=Projects
    SNS_TOPIC_ARN=arn:aws:sns:us-east-1:278101256714:x24142816-notification
    SQS_QUEUE_URL=https://sqs.us-east-1.amazonaws.com/278101256714/x24142816_JiyoungKim_Queues

### **Run the Application**

    python manage.py runserver 8080
    python3 manage.py runserver 8080

---------------------------------------------------------
    4. Deployment Steps (Elastic Beanstalk)
---------------------------------------------------------

### **Initialize Elastic Beanstalk**
    
    eb init -p python-3.9 Remoteworktimetracker

### **Create an Environment**

    No need since the environment already exists (my-env)

### **Deploy the Application**
    
    eb deploy

### **Check Logs**
    
    eb logs

### **Open Application**
    
    eb open

---------------------------------------------------------
    5. Configuration Files
---------------------------------------------------------

### ** `django.config` (Elastic Beanstalk Configuration)**

    Located in `.ebextensions/`, this file contains environment settings for Django.

    option_settings:
        aws:elasticbeanstalk:container:python:
            WSGIPath: tracker.wsgi:application

### ** `python-publish.yml` (GitActions)** 

    This GitHub Actions workflow automates the CI/CD process 
    for publishing a Python package to PyPI.
    (content: pylint-static analysis, library)

### ** `Procile` (Role to run Django with Gunicorn)**
    
    web: gunicorn --bind 0.0.0.0:8080 tracker.wsgi:application