# -*- coding: utf-8 -*-
import json, falcon

from db import session
import model
import auth
import util

class Registration(object):

	def on_options(self, req, resp):
		return

	def on_post(self, req, resp):
		data = json.loads(req.stream.read())

		existing_user = session.query(model.User).filter(model.User.email == data['email']).first()
		if existing_user != None:
			req.context['result'] = { 'error': "duplicate_user" }
			return

		user = model.User(email=data['email'], password=auth.get_hashed_password(data['password']), first_name=data['first_name'], last_name=data['last_name'], sex=data['gender'], short_info=data["short_info"])
		session.add(user)
		session.commit()

		profile = model.Profile(user_id=user.id, addr_street=data['addr_street'], addr_city=data['addr_city'], addr_zip=data['addr_zip'], addr_country=data['addr_country'],\
			school_name=data['school_name'], school_street=data['school_street'], school_city=data['school_city'], school_zip=data['school_zip'], school_country=data['school_country'], school_finish=int(data['school_finish']),\
			tshirt_size=data['tshirt_size'].upper())
		session.add(profile)

		util.mail.send([user.email.decode('utf-8')], u'[KSI] Potvrzení registrace do Korespondenčního semináře z informatiky', u'Ahoj!<br/>Vítáme tě v Korespondenčním semináři z informatiky Fakulty informatiky Masarykovy univerzity. Nyní můžeš začít řešit naplno. Stačí se přihlásit na https://ksi.fi.muni.cz pomocí e-mailu a zvoleného hesla. Přejeme ti hodně úspěchů při řešení semináře!<br/><br/>KSI')
		session.commit()
		session.close()


@@ -433,16 +433,24 @@
 return%0A%0A
+%09%09try:%0A%09
 %09%09user =
@@ -652,46 +652,125 @@
 )%0A%09%09
-session.add(user)%0A%09%09session.commit()%0A%0A
+except:%0A%09%09%09req.context%5B'result'%5D = %7B 'error': %22Nelze vytvo%C5%99it u%C5%BEivatele, kontaktuj pros%C3%ADm orga.%22 %7D%0A%09%09%09raise%0A%0A%09%09try:%0A%09
 %09%09pr
@@ -936,16 +936,17 @@
 '%5D,%5C%0A%09%09%09
+%09
 school_n
@@ -1156,16 +1156,17 @@
 %5D),%5C%0A%09%09%09
+%09
 tshirt_s
@@ -1204,27 +1204,318 @@
 )%0A%09%09
-session.add(profile
+except:%0A%09%09%09req.context%5B'result'%5D = %7B 'error': %22Nelze vytvo%C5%99it profil, kontaktuj pros%C3%ADm orga.%22 %7D%0A%09%09%09raise%0A%0A%09%09# Uzivatele i profil schvalne pridavame az na konci -- aby nedoslo k pridani pouze uzivatele pri chybejicim klici v profilu%0A%09%09session.add(user)%0A%09%09session.add(profile)%0A%09%09session.commit()%0A%09%09session.close(
 )%0A%0A%09
@@ -1914,43 +1914,6 @@
 SI')
-%0A%09%09session.commit()%0A%09%09session.close()
 %0A%0A

Add registration exception handling.