prabhu46's picture
Create app.py
a01f576
import os
import uuid
import sqlite3
from fastapi import FastAPI, File, UploadFile, HTTPException, Depends, Header
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi.responses import HTMLResponse
app = FastAPI()
security = HTTPBasic()
# Create SQLite3 database connection
conn = sqlite3.connect('database.db', check_same_thread=False)
cursor = conn.cursor()
# Initialize database schema
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS images (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
filename TEXT NOT NULL,
url TEXT NOT NULL,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS comments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
image_id INTEGER NOT NULL,
text TEXT NOT NULL,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY(image_id) REFERENCES images(id) ON DELETE CASCADE
)
''')
conn.commit()
# Define models
class User:
def __init__(self, id, username, email, password):
self.id = id
self.username = username
self.email = email
self.password = password
class Image:
def __init__(self, id, user_id, filename, url):
self.id = id
self.user_id = user_id
self.filename = filename
self.url = url
class Comment:
def __init__(self, id, user_id, image_id, text):
self.id = id
self.user_id = user_id
self.image_id = image_id
self.text = text
# Helper functions
def get_user_by_email(email):
cursor.execute('SELECT * FROM users WHERE email = ?', (email,))
row = cursor.fetchone()
if row:
return User(row[0], row[1], row[2], row[3])
else:
return None
def get_user_by_credentials(credentials: HTTPBasicCredentials = Depends(security)):
user = get_user_by_email(credentials.username)
if user and user.password == credentials.password:
return user
else:
raise HTTPException(status_code=401, detail='Invalid email or password')
def get_image_by_id(image_id):
cursor.execute('SELECT * FROM images WHERE id = ?', (image_id,))
row = cursor.fetchone()
if row:
return Image(row[0], row[1], row[2], row[3])
else:
return None
# Implement user registration route
@app.post('/api/register')
def register(username: str, email: str, password: str):
user = get_user_by_email(email)
if user:
raise HTTPException(status_code=400, detail='Email already registered')
else:
cursor.execute('INSERT INTO users (username, email, password) VALUES (?, ?, ?)', (username, email, password))
conn.commit()
return {'message': 'User registered successfully'}
# Implement user login route
@app.post('/api/login')
def login(credentials: HTTPBasicCredentials = Depends(security)):
user = get_user_by_credentials(credentials)
return {'message': 'Logged in successfully', 'user': user.__dict__}
# # Implement image upload route
# @app.post('/api/images')
# @app.post('/api/images')
# def upload_image(file: UploadFile = File(...), user: User = Depends(get_user_by_credentials)):
# extension = file.filename.split('.')[-1]
# filename = f'{uuid.uuid4()}.{extension}'
# url = f'/uploads/{filename}'
# with open(f'uploads/{filename}', 'wb') as f:
# f.write(file.file.read())
# cursor = conn.cursor()
# cursor.execute('INSERT INTO images (user_id, filename, url) VALUES (?, ?, ?)', (user.id, filename, url))
# conn.commit()
# image_id = cursor.lastrowid
# return {'message': 'Image uploaded successfully', 'image_id': image_id}