@@ -10,7 +10,7 @@ router.get('/me', authMiddleware, async (req: AuthRequest, res) => {
1010 try {
1111 // Use actualUserId so members see their own profile, not the owner's
1212 const result = await query (
13- 'SELECT id, email, name, (family_owner_id IS NULL) AS is_owner FROM users WHERE id = $1' ,
13+ 'SELECT id, email, name, role, (family_owner_id IS NULL) AS is_owner FROM users WHERE id = $1' ,
1414 [ req . actualUserId ]
1515 ) ;
1616 if ( result . rows . length === 0 ) {
@@ -31,9 +31,10 @@ router.post('/register', async (req, res) => {
3131 }
3232
3333 try {
34- const { email, password, name, inviteToken } = req . body ;
34+ const { email, password, name, inviteToken, role } = req . body ;
3535 const normalizedEmail = typeof email === 'string' ? normalizeEmail ( email ) : '' ;
3636 const cleanedName = typeof name === 'string' ? name . trim ( ) : '' ;
37+ const cleanedRole = [ 'parent' , 'enfant' ] . includes ( role ) ? role : 'parent' ;
3738
3839 if ( ! normalizedEmail || ! password || ! cleanedName ) {
3940 return res . status ( 400 ) . json ( { success : false , error : 'Missing required fields' } ) ;
@@ -54,8 +55,8 @@ router.post('/register', async (req, res) => {
5455
5556 // Create user
5657 const result = await query (
57- 'INSERT INTO users (email, password_hash, name) VALUES ($1, $2, $3) RETURNING id, email, name' ,
58- [ normalizedEmail , password_hash , cleanedName ]
58+ 'INSERT INTO users (email, password_hash, name, role ) VALUES ($1, $2, $3, $4 ) RETURNING id, email, name, role ' ,
59+ [ normalizedEmail , password_hash , cleanedName , cleanedRole ]
5960 ) ;
6061
6162 const user = result . rows [ 0 ] ;
@@ -74,12 +75,23 @@ router.post('/register', async (req, res) => {
7475 await query ( 'UPDATE users SET family_owner_id = $1 WHERE id = $2' , [ invite . owner_id , user . id ] ) ;
7576 await query ( "UPDATE family_invites SET status = 'accepted' WHERE id = $1" , [ invite . id ] ) ;
7677 }
78+ } else {
79+ // Auto-join: if a family owner already exists, automatically join that family
80+ const ownerResult = await query (
81+ 'SELECT id FROM users WHERE family_owner_id IS NULL AND id != $1 ORDER BY created_at ASC LIMIT 1' ,
82+ [ user . id ]
83+ ) ;
84+ if ( ownerResult . rows . length > 0 ) {
85+ const existingOwner = ownerResult . rows [ 0 ] as { id : string } ;
86+ ownerId = existingOwner . id ;
87+ await query ( 'UPDATE users SET family_owner_id = $1 WHERE id = $2' , [ existingOwner . id , user . id ] ) ;
88+ }
7789 }
7890
7991 const token = generateToken ( user . id , ownerId ) ;
8092 const isOwner = ownerId === user . id ;
8193
82- res . json ( { success : true , data : { user : { ...user , is_owner : isOwner } , token } } ) ;
94+ res . json ( { success : true , data : { user : { ...user , is_owner : isOwner , role : user . role } , token } } ) ;
8395 } catch ( error ) {
8496 console . error ( 'Register error:' , error ) ;
8597 res . status ( 500 ) . json ( { success : false , error : 'Internal server error' } ) ;
@@ -119,7 +131,7 @@ router.post('/login', async (req, res) => {
119131 res . json ( {
120132 success : true ,
121133 data : {
122- user : { id : user . id , email : user . email , name : user . name , is_owner : isOwner } ,
134+ user : { id : user . id , email : user . email , name : user . name , role : user . role , is_owner : isOwner } ,
123135 token
124136 }
125137 } ) ;
0 commit comments