Update session cart when logging in

main
Ashelyn Dawn 3 years ago
parent ee74f7879e
commit bd6dd194d6

@ -26,7 +26,13 @@ router.post('/', parseJSON, loginValidation, async (req, res) => {
}]})
}
await db.session.create(req, user)
const cart = req.sessionObj?.cart
const session = await db.session.create(req, user)
if (cart)
await db.session.attachCart(session.uuid, cart.uuid)
else if (user.last_cart)
await db.session.attachCart(session.uuid, user.last_cart)
res.json(user)
})

@ -10,6 +10,7 @@ module.exports = [
'time_email_confirmed',
'time_password_changed',
'last_active',
'last_cart',
'num_orders',
'is_admin'
]

@ -81,6 +81,21 @@ session.end = async (session_uuid) => {
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
}
session.attachCart = async (session_uuid, cart_uuid) => {
const query = {
text: 'select * from sos.attach_cart($1, $2)',
values: [
session_uuid,
cart_uuid
]
}
debug(query);
const {rows} = await pg.query(query)
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
}
session.clearCart = async (session_uuid) => {
const query = {
text: 'select * from sos.clear_cart($1)',

@ -27,7 +27,7 @@ user.findById = async (user_uuid) => {
user.findByEmail = async (email) => {
const query = {
text: 'select * from "user" where user_email = $1',
text: 'select * from sos.v_user where user_email = $1',
values: [
email
]

@ -170,7 +170,8 @@ create or replace view sos.v_user as
select
"user".*,
user_num_orders,
user_last_active
user_last_active,
user_last_cart
from sos.user
left join (
select
@ -186,4 +187,13 @@ create or replace view sos.v_user as
max(session_time_last_active) user_last_active
from sos."session"
group by session_user_uuid
) "last_session" on "user".user_uuid = "last_session".session_user_uuid;
) "last_session" on "user".user_uuid = "last_session".session_user_uuid
left join (
select distinct on (session_user_uuid)
session_user_uuid,
session_cart as user_last_cart,
session_time_last_active
from sos."session"
where session_cart is not null
order by session_user_uuid, session_time_last_active desc
) "last_cart" on "user".user_uuid = "last_cart".session_user_uuid;

@ -886,6 +886,20 @@ begin
return query select * from sos.v_order where order_uuid = _order_uuid;
end; $function$;
create or replace function sos.attach_cart(_session_uuid uuid, _cart_uuid uuid)
returns setof sos.v_session
language plpgsql
as $function$
begin
update sos."session"
set session_cart = _cart_uuid
where session_uuid = _session_uuid
and session_time_logged_out is null
and now() < (select session_time_last_active + session_timeout_length);
return query select * from sos.v_session where session_uuid = _session_uuid;
end; $function$;
create or replace function sos.clear_cart(_session_uuid uuid)
returns setof sos.v_session
language plpgsql

@ -3,18 +3,23 @@ import Link from 'next/link'
import Head from 'next/head'
import Router from 'next/router'
import isEmail from 'validator/lib/isEmail'
import axios from 'axios'
import {useSetUser} from '~/hooks/useUser'
import {useSetCart} from '~/hooks/useCart'
import {FormController, Input, Button} from '~/components/form'
import useAccountRedirect from '~/hooks/useAccountRedirect'
export default function Login(){
useAccountRedirect()
const setUser = useSetUser()
const setCart = useSetCart()
const redirectAfterLogin = user => {
setUser(user)
axios.get(`/api/cart`).then(({data: cart}) => setCart(cart));
if (user.is_admin)
Router.push('/admin')
else

Loading…
Cancel
Save