Skip to content

Problem: Deleting user doesn't remove project__user mapping, breaks Team view #3514

@H3rmt

Description

@H3rmt

Issue

When a User is added to a project and then deleted the Team view is broken.

User created and added to project:

select * from db.user;
id|created|username|name|email|password|alert|external|admin|pro
1|2025-11-27 15:33:23 +0000 UTC|admin|Semaphore Admin|admin@localhost|$2a$11$RJHK9kKG/Wv3hE6YGmQU2OI5kepiIoJ0YZDJJB5q4Riky5nUcGQxu|0|0|1|0
11|2025-12-10 12:04:24 +0000 UTC|test|test|test@test|$2a$11$QM7nugXM4bBbWQNRCgeNYOvqLass6jTlk5jDvC.nu//Z/i6PsNPj.|0|0|0|0

select * from db.project__user;
project_id|user_id|role
1|1|owner
2|1|owner
2|8|task_runner
2|11|guest

User deleted via web ui:

select * from db.user;
id|created|username|name|email|password|alert|external|admin|pro
1|2025-11-27 15:33:23 +0000 UTC|admin|Semaphore Admin|admin@localhost|$2a$11$RJHK9kKG/Wv3hE6YGmQU2OI5kepiIoJ0YZDJJB5q4Riky5nUcGQxu|0|0|1|0

select * from db.project__user;
project_id|user_id|role
1|1|owner
2|1|owner
2|8|task_runner
2|11|guest

Selecting all users returns empty entry (query copied from

q := squirrel.Select("u.*").
)

select u.* from project__user as pu left join user as u on pu.user_id=u.id where pu.project_id=2;
id|created|username|name|email|password|alert|external|admin|pro
1|2025-11-27 15:33:23 +0000 UTC|admin|Semaphore Admin|admin@localhost|$2a$11$RJHK9kKG/Wv3hE6YGmQU2OI5kepiIoJ0YZDJJB5q4Riky5nUcGQxu|0|0|1|0
|||||||||

Opening Team view

time="2025-12-10T12:05:36Z" level=error msg="sql: Scan error on column index 0, name \"id\": converting NULL to int is unsupported"
goroutine 2215117 [running]:
runtime/debug.Stack()
	/usr/local/go/src/runtime/debug/stack.go:26 +0x5e
runtime/debug.PrintStack()
	/usr/local/go/src/runtime/debug/stack.go:18 +0x13
github.com/semaphoreui/semaphore/api/helpers.WriteError({0x2956690, 0xc0001c8700}, {0x294f5c0, 0xc00040bdc0})
	/go/src/semaphore/api/helpers/write_response.go:52 +0x192
github.com/semaphoreui/semaphore/api/projects.GetUsers({0x2956690, 0xc0001c8700}, 0xc0006a0140)
	/go/src/semaphore/api/projects/users.go:59 +0x2cd
net/http.HandlerFunc.ServeHTTP(0xc00089f460?, {0x2956690?, 0xc0001c8700?}, 0xc000a5a150?)
	/usr/local/go/src/net/http/server.go:2294 +0x29
github.com/semaphoreui/semaphore/api.Route.GetMustCanMiddleware.func5.1({0x2956690, 0xc0001c8700}, 0xc0006a0140)
	/go/src/semaphore/api/projects/project.go:62 +0x127

Impact

Database, Web-Frontend (what users interact with)

Installation method

Docker

Database

SQLite

Browser

Chrome

Semaphore Version

ca0951764f4f:/home/semaphore# semaphore version
v2.16.45-cbd5620-1762540215

Ansible Version

Logs & errors

No response

Manual installation - system information

No response

Configuration

env:

...
SEMAPHORE_DB_DIALECT=sqlite
...

Additional information

removing user with delete from db.project__user where user_id=11; fixes the problem

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions