Sindbad~EG File Manager

Current Path : /home/numerotech/mobileapp.aios-scientificcommittee.org/aiosapp/core/model/
Upload File :
Current File : //home/numerotech/mobileapp.aios-scientificcommittee.org/aiosapp/core/model/APIModel.py

from sqlalchemy import create_engine, MetaData, Table, insert, select,update,delete,text
from sqlalchemy.sql import and_, or_
from core import app
import json

# engine = create_engine(app.config['DATABASE_URI_TNOA'])
engine = create_engine(app.config['DATABASE_URI'],pool_recycle=3600)

class APIModel():
	def __init__(self):
		try:
			self.meta           	= MetaData()
			self.users     			= Table("users", self.meta, autoload=True, autoload_with=engine)
			self.abs_agenda     	= Table("abs_agenda", self.meta, autoload=True, autoload_with=engine)
			
		except Exception as e:
			print(e)

	def get_user_by_email(self,email,society_id):
		conn = engine.connect()
		stmt = text("select * from users where email= :email and society_id=:society_id;")       
		result = conn.execute(stmt,email=email,society_id=society_id)
		conn.close()
		results = [dict(r) for r in result] if result else None
		if results :
			return results[0]
		else:
			return None
			
	def checkIsEvaluator(self,user_id):
		conn = engine.connect()
		stmt = text("select case when count(*) >0 then 1 else 0 end as IsEvaluator from abs_marks where eva_id = :user_id")       
		result = conn.execute(stmt,user_id=user_id)
		conn.close()
		results = [dict(r) for r in result] if result else None
		if results :
			return results[0]
		else:
			return None	
	
	def checkEvaluator(self,user_id,conf_id,current_dt):
		conn = engine.connect()
		stmt = text(" SELECT DISTINCT a.abs_type,m.eva_id as user_id,DATE_FORMAT(dt.start_date, '%Y-%m-%d %H:%i:%s') as start_date,DATE_FORMAT(dt.end_date, '%Y-%m-%d %H:%i:%s') as end_date, "
				+ " CASE WHEN dt.start_date  <= :current_dt AND dt.end_date >= :current_dt THEN 1 ELSE 0 END AS can_evaluate "
				+ " from abs_marks m inner join abstracts a ON a.abs_id = m.abs_id " 
				+ " inner join abs_types dt ON dt.abs_type = m.eva_abs_type" 
				+ " where m.eva_id = :user_id and a.conf_id=:conf_id and dt.conf_id = :conf_id")       
		result = conn.execute(stmt,user_id=user_id,current_dt=current_dt,conf_id=conf_id)
		conn.close()
		results = [dict(r) for r in result] if result else None
		if results :
			return results
		else:
			return None		
			
			
	def getUserEvaluationAssignment(self,user_id,conf_id):
		conn = engine.connect()
		stmt = text("select t.*,m.mark_id,m.abs_id,m.order_by as evaluation_order_by,m.m1,m.m2,m.m3,m.m4,m.m5,m.marks_total,m.comments,m.sync_at,m.mark_update_count from abs_marks m "
					+ " inner join sqlite_eabstract t on t.abs_id =m.abs_id "
					+ " where can_evaluate = 1 and m.eva_id = :user_id and t.conf_id = :conf_id")       
		result = conn.execute(stmt,user_id=user_id,conf_id=conf_id)
		conn.close()
		results = [dict(r) for r in result] if result else None
		if results :
			return results
		else:
			return None		
		

	def getSociety(self,society_id):
		conn = engine.connect()
		stmt = text("select * from societies where society_id = :society_id;")
		results = conn.execute(stmt,society_id=society_id)
		conn.close()
		results=  [dict(r) for r in results] if results else None
		if results :
			return results[0]
		else:
			return None 		

	def getConf(self,conf_id):
		conn = engine.connect()
		stmt = text("select * from conference where conf_id = :conf_id;")
		results = conn.execute(stmt,conf_id=conf_id)
		conn.close()
		results=  [dict(r) for r in results] if results else None
		if results :
			return results[0]
		else:
			return None 		

			
	def update_member(self,user_id,data):
		stmt = self.users.update().values(data).where(self.users.c.user_id.in_([user_id]))
		select_stmt = text("select *  from users where user_id = "+str(user_id)+" ")
		conn = engine.connect()
		result = conn.execute(stmt)
		select_result = conn.execute(select_stmt)
		conn.close()
		result_2 = [dict(r) for r in select_result] if select_result else None
		conn.close()
		if result_2 : 
			return result_2[0]
		else:
			return None		

	def getAbstracts(self,updated_at,conf_id):
		conn        = engine.connect()
		if updated_at :
			stmt    = text("select * from sqlite_eabstract where updated_at >'"+updated_at+"' and conf_id ="+conf_id+";")
		else :
			stmt    = text("select * from sqlite_eabstract where conf_id ="+conf_id+";")
		results     = conn.execute(stmt)
		conn.close()
		result      = [dict(r) for r in results] if results else None
		if result :
			return result
		else :
			return []		

	def getAgendaByUserId(self,user_id,conf_id):
		conn        = engine.connect()
		stmt    = text("select * from abs_agenda where  user_id ="+user_id+" and conf_id ="+conf_id+";")
		results     = conn.execute(stmt)
		conn.close()
		result      = [dict(r) for r in results] if results else None
		if result :
			return result
		else :
			return []	

	def deleteAgendasByUserIdAndAbsIds(self,user_id,conf_id,abs_ids):
		conn        = engine.connect()
		print(abs_ids)
		abs_ids =','.join(str(v) for v in abs_ids)
		print(abs_ids)
		stmt    = text("delete from abs_agenda where can_delete = 1 and user_id ="+user_id+" and conf_id ="+conf_id+" and abs_id in ("+abs_ids+");")
		print("deleteAgendasByUserId")
		print(stmt)
		results     = conn.execute(stmt)
		conn.close()
		return True

	def getAgendasByAgendaIds(self,user_id,conf_id,agenda_ids):
		conn        = engine.connect()
		stmt    = text("select * from abs_agenda where  user_id ="+user_id+" and conf_id ="+conf_id+" and agenda_id in ("+','.join(agenda_ids)+";")
		results     = conn.execute(stmt)
		conn.close()
		result      = [dict(r) for r in results] if results else None
		if result :
			return result
		else :
			return None		
	def insertAgendas(self,data):
		conn        = engine.connect()
		result = conn.execute(self.abs_agenda.insert(), data)
		conn.close()
		return "success"
	
	def update_marks(self,update_data):
		stmt = 'UPDATE abs_marks SET '
		column_names = ["m1","m2","m3","m4","m5","sys_m1","sys_m2","sys_m3","sys_m4","sys_m5","comments","marks_total","sys_marks_total","mark_update_count","sync_at","device_type"]
		pkids = []
		for j in column_names:
			stmt = stmt + j +" = case "
			for i in update_data:
				stmt = stmt + ' When mark_id = ' + str(i["mark_id"]) + " then '" + (str(i[j]) if i[j] else 'Null') +"'" 
				pkids.append(i["mark_id"])
			stmt = stmt + ' END, '
		stmt = stmt[:-2]
		pkid =  ','.join(str(e) for e in pkids)
		stmt = stmt + ' Where mark_id in (' +str(pkid)+' );'
		print("stmt : ",stmt)
		conn = engine.connect()
		result = conn.execute(stmt)
		conn.close()
		return "Success"
	
	def getUserEvaluations(self,user_id,conf_id,last_sync_at):
		conn = engine.connect()
		if last_sync_at:
			stmt = text("select m.* from abs_marks m inner join abstracts a on a.abs_id = m.abs_id where conf_id = :conf_id and marks_total > 0 and eva_id = :user_id and sync_at > :last_sync_at")       
		else:
			stmt = text("select m.* from abs_marks m inner join abstracts a on a.abs_id = m.abs_id where conf_id = :conf_id and marks_total > 0 and eva_id = :user_id")       
		result = conn.execute(stmt,conf_id=conf_id,user_id=user_id,last_sync_at=last_sync_at)
		conn.close()
		results = [dict(r) for r in result] if result else None
		if results :
			return results
		else:
			return None		
	

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists