yurt
This commit is contained in:
1
app/models/__init__.py
Normal file
1
app/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
# Models package
|
||||
94
app/models/database.py
Normal file
94
app/models/database.py
Normal file
@@ -0,0 +1,94 @@
|
||||
"""
|
||||
Database operations and models for pet pictures
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
from flask import current_app, g
|
||||
|
||||
|
||||
def get_db():
|
||||
"""Get database connection"""
|
||||
if 'db' not in g:
|
||||
g.db = sqlite3.connect("pet_pictures.db")
|
||||
g.db.row_factory = sqlite3.Row
|
||||
return g.db
|
||||
|
||||
|
||||
def close_db(e=None):
|
||||
"""Close database connection"""
|
||||
db = g.pop('db', None)
|
||||
if db is not None:
|
||||
db.close()
|
||||
|
||||
|
||||
def init_db():
|
||||
"""Initialize database with required tables"""
|
||||
db = get_db()
|
||||
db.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS pet_pictures (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
filename TEXT NOT NULL,
|
||||
subscriber_name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
uploaded_at TIMESTAMP NOT NULL,
|
||||
posted BOOLEAN DEFAULT 0,
|
||||
likes INTEGER DEFAULT 0
|
||||
)
|
||||
"""
|
||||
)
|
||||
db.commit()
|
||||
|
||||
|
||||
class PetPicture:
|
||||
"""Model for pet picture operations"""
|
||||
|
||||
@staticmethod
|
||||
def get_all():
|
||||
"""Get all pet pictures"""
|
||||
db = get_db()
|
||||
return db.execute(
|
||||
"SELECT * FROM pet_pictures ORDER BY uploaded_at DESC"
|
||||
).fetchall()
|
||||
|
||||
@staticmethod
|
||||
def get_posted():
|
||||
"""Get only posted pet pictures"""
|
||||
db = get_db()
|
||||
return db.execute(
|
||||
"SELECT * FROM pet_pictures WHERE posted = 1 ORDER BY uploaded_at DESC"
|
||||
).fetchall()
|
||||
|
||||
@staticmethod
|
||||
def create(filename, subscriber_name, description, uploaded_at):
|
||||
"""Create new pet picture record"""
|
||||
db = get_db()
|
||||
db.execute(
|
||||
"INSERT INTO pet_pictures (filename, subscriber_name, description, uploaded_at) VALUES (?, ?, ?, ?)",
|
||||
(filename, subscriber_name, description, uploaded_at)
|
||||
)
|
||||
db.commit()
|
||||
|
||||
@staticmethod
|
||||
def mark_as_posted(picture_id):
|
||||
"""Mark picture as posted"""
|
||||
db = get_db()
|
||||
db.execute("UPDATE pet_pictures SET posted = 1 WHERE id = ?", (picture_id,))
|
||||
db.commit()
|
||||
|
||||
@staticmethod
|
||||
def update_likes(picture_id, increment=True):
|
||||
"""Update like count for a picture"""
|
||||
db = get_db()
|
||||
if increment:
|
||||
db.execute("UPDATE pet_pictures SET likes = likes + 1 WHERE id = ?", (picture_id,))
|
||||
else:
|
||||
db.execute("UPDATE pet_pictures SET likes = likes - 1 WHERE id = ?", (picture_id,))
|
||||
db.commit()
|
||||
|
||||
@staticmethod
|
||||
def get_like_count(picture_id):
|
||||
"""Get current like count for a picture"""
|
||||
db = get_db()
|
||||
result = db.execute("SELECT likes FROM pet_pictures WHERE id = ?", (picture_id,)).fetchone()
|
||||
return result['likes'] if result else 0
|
||||
Reference in New Issue
Block a user