from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from config import CONFIG from create_db import User, Card, get_session, get_engine from hashlib import md5 #@TODO najbrž je treba narediti tako da org card tudi dobi share id in se ostalo, kar to obsega def share(card, user_id): #tu bi lahko naredili nek autoincrement ampak i guess da hash unique idja tudi daje unique share_id, tega potem uporabljamo, da preverimo matche h = md5(str(card.id).encode("utf-8")).hexdigest() card.share_id = h Session = get_session() with Session() as dbsession: owner_card = dbsession.query(Card).filter(Card.id == card.id).first() owner_card.share_id = h dbsession.commit() # all users users = dbsession.query(User).filter(User.id != user_id).all() for user in users: #skip če že ima ta card v db. existing = dbsession.query(Card).filter(Card.title == card.title, Card.owner_id==user.id).all() if existing == []: new_card = card = Card(title=card.title, interest_rate=-1.0, owner_id=user.id, item_location=card.item_location, last_review=None, share_id=h) dbsession.add(new_card) dbsession.commit() dbsession.close() get_engine().dispose() def get_all_shared(user_id): """adds all existing shared cards to this users collection""" #get all cards with a shared id but make suer they are unique. add them to collection of user #@TODO A je to resres ok? Session = get_session() with Session() as dbsession: all_shared_cards = dbsession.query(Card).filter(Card.share_id != "0").distinct(Card.share_id).group_by(Card.share_id) for c in all_shared_cards: new_card = Card(title= c.title, interest_rate=-1.0, owner_id=user_id, item_location=c.item_location, last_review=None, share_id=c.share_id) dbsession.add(new_card) dbsession.commit() dbsession.close() get_engine().dispose()