)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"de7d97cb10d8bb84590e31b2a190e992bcb82feb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"3781131a_519437a2","updated":"2024-08-20 07:59:52.000000000","message":"you\u0027ll need to rebase this as well","commit_id":"f3d86e59fa3480994b0dbce0c4193c5e28bc8c4f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"509e8e9c0f75fc9bbdf9ccdaf6732f7d3d1a25ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"4dc7af17_78d65a3a","in_reply_to":"3781131a_519437a2","updated":"2024-08-20 09:56:33.000000000","message":"Done","commit_id":"f3d86e59fa3480994b0dbce0c4193c5e28bc8c4f"}],"core/auth/memberships/main.go":[{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\tSSHPublicKeys []string `json:\"sshPublicKeys,omitempty\"`"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"type GroupApplication struct {"},{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"}],"source_content_type":"text/x-go","patch_set":2,"id":"d5cac5bd_279a796a","line":88,"updated":"2024-08-08 12:20:36.000000000","message":"Call this MembershipRequest","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\tSSHPublicKeys []string `json:\"sshPublicKeys,omitempty\"`"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"type GroupApplication struct {"},{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"}],"source_content_type":"text/x-go","patch_set":2,"id":"ec10423f_fc50d0ed","line":88,"in_reply_to":"b5b2f246_0b7805f1","updated":"2024-08-12 08:39:34.000000000","message":"you need to update store method namings as well to use membership request in the name instead of user application","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\tSSHPublicKeys []string `json:\"sshPublicKeys,omitempty\"`"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"type GroupApplication struct {"},{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"}],"source_content_type":"text/x-go","patch_set":2,"id":"b5b2f246_0b7805f1","line":88,"in_reply_to":"d5cac5bd_279a796a","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\tSSHPublicKeys []string `json:\"sshPublicKeys,omitempty\"`"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"type GroupApplication struct {"},{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"}],"source_content_type":"text/x-go","patch_set":2,"id":"785284ed_2bb8c815","line":88,"in_reply_to":"ec10423f_fc50d0ed","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"},{"line_number":92,"context_line":"\tApplyAs string"},{"line_number":93,"context_line":"\tStatus  string"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"35b2f36f_79b5c3ae","line":92,"updated":"2024-08-08 12:20:36.000000000","message":"Rename this to Type or MembershipType.\nApplyAs suggest that one user is acting on behalf of some other user.","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":89,"context_line":"\tUser    string"},{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"},{"line_number":92,"context_line":"\tApplyAs string"},{"line_number":93,"context_line":"\tStatus  string"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"052636ee_bff5a3c0","line":92,"in_reply_to":"35b2f36f_79b5c3ae","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"},{"line_number":92,"context_line":"\tApplyAs string"},{"line_number":93,"context_line":"\tStatus  string"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"type SQLiteStore struct {"}],"source_content_type":"text/x-go","patch_set":2,"id":"181b19ed_163dcd32","line":93,"updated":"2024-08-08 12:20:36.000000000","message":"Both Status and MembershipType fields should be enums. They can be stored as strings in db though","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":90,"context_line":"\tGroup   string"},{"line_number":91,"context_line":"\tReason  string"},{"line_number":92,"context_line":"\tApplyAs string"},{"line_number":93,"context_line":"\tStatus  string"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"type SQLiteStore struct {"}],"source_content_type":"text/x-go","patch_set":2,"id":"608bfae2_89f26d4b","line":93,"in_reply_to":"181b19ed_163dcd32","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":140,"context_line":"\t\t\treason TEXT,"},{"line_number":141,"context_line":"\t\t\tapply_as TEXT,"},{"line_number":142,"context_line":"\t\t\tstatus TEXT,"},{"line_number":143,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name),"},{"line_number":144,"context_line":"\t\t\tUNIQUE (username, group_name)"},{"line_number":145,"context_line":"\t\t);"},{"line_number":146,"context_line":"\t\tCREATE TABLE IF NOT EXISTS users ("}],"source_content_type":"text/x-go","patch_set":2,"id":"7232c5a6_205160af","line":143,"updated":"2024-08-08 12:20:36.000000000","message":"Username should be a foreign key as well","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":140,"context_line":"\t\t\treason TEXT,"},{"line_number":141,"context_line":"\t\t\tapply_as TEXT,"},{"line_number":142,"context_line":"\t\t\tstatus TEXT,"},{"line_number":143,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name),"},{"line_number":144,"context_line":"\t\t\tUNIQUE (username, group_name)"},{"line_number":145,"context_line":"\t\t);"},{"line_number":146,"context_line":"\t\tCREATE TABLE IF NOT EXISTS users ("}],"source_content_type":"text/x-go","patch_set":2,"id":"c98c11c7_e7591662","line":143,"in_reply_to":"7232c5a6_205160af","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":269,"context_line":"}"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"func (s *SQLiteStore) IsGroupMember(user, group string) (bool, error) {"},{"line_number":272,"context_line":"\tquery :\u003d `"},{"line_number":273,"context_line":"        SELECT EXISTS ("},{"line_number":274,"context_line":"            SELECT 1"},{"line_number":275,"context_line":"            FROM user_to_group"}],"source_content_type":"text/x-go","patch_set":2,"id":"5b1a3273_b7e521a2","line":272,"updated":"2024-08-08 12:20:36.000000000","message":"Rename to IsDirectGroupMember","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":269,"context_line":"}"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"func (s *SQLiteStore) IsGroupMember(user, group string) (bool, error) {"},{"line_number":272,"context_line":"\tquery :\u003d `"},{"line_number":273,"context_line":"        SELECT EXISTS ("},{"line_number":274,"context_line":"            SELECT 1"},{"line_number":275,"context_line":"            FROM user_to_group"}],"source_content_type":"text/x-go","patch_set":2,"id":"4464c859_fb70ef46","line":272,"in_reply_to":"5b1a3273_b7e521a2","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":690,"context_line":"\treturn nil"},{"line_number":691,"context_line":"}"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"func (s SQLiteStore) AddUserApplications(user, group, reason, applyAs, status string) error {"},{"line_number":694,"context_line":"\tresult, err :\u003d s.db.Exec(`"},{"line_number":695,"context_line":"\t\tUPDATE user_applications"},{"line_number":696,"context_line":"\t\tSET reason \u003d ?, apply_as \u003d ?"}],"source_content_type":"text/x-go","patch_set":2,"id":"d5cc7d1c_3d36256d","line":693,"updated":"2024-08-08 12:20:36.000000000","message":"Should not receiver be a pointer? here and across this file","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":690,"context_line":"\treturn nil"},{"line_number":691,"context_line":"}"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"func (s SQLiteStore) AddUserApplications(user, group, reason, applyAs, status string) error {"},{"line_number":694,"context_line":"\tresult, err :\u003d s.db.Exec(`"},{"line_number":695,"context_line":"\t\tUPDATE user_applications"},{"line_number":696,"context_line":"\t\tSET reason \u003d ?, apply_as \u003d ?"}],"source_content_type":"text/x-go","patch_set":2,"id":"f12790b3_4de36897","line":693,"updated":"2024-08-08 12:20:36.000000000","message":"This function now does two things, create request and update request. These should be two separate methods.","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":690,"context_line":"\treturn nil"},{"line_number":691,"context_line":"}"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"func (s SQLiteStore) AddUserApplications(user, group, reason, applyAs, status string) error {"},{"line_number":694,"context_line":"\tresult, err :\u003d s.db.Exec(`"},{"line_number":695,"context_line":"\t\tUPDATE user_applications"},{"line_number":696,"context_line":"\t\tSET reason \u003d ?, apply_as \u003d ?"}],"source_content_type":"text/x-go","patch_set":2,"id":"13c00af1_d120044f","line":693,"in_reply_to":"d5cc7d1c_3d36256d","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":690,"context_line":"\treturn nil"},{"line_number":691,"context_line":"}"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"func (s SQLiteStore) AddUserApplications(user, group, reason, applyAs, status string) error {"},{"line_number":694,"context_line":"\tresult, err :\u003d s.db.Exec(`"},{"line_number":695,"context_line":"\t\tUPDATE user_applications"},{"line_number":696,"context_line":"\t\tSET reason \u003d ?, apply_as \u003d ?"}],"source_content_type":"text/x-go","patch_set":2,"id":"c70ce5a9_4c6da346","line":693,"in_reply_to":"f12790b3_4de36897","updated":"2024-08-11 08:59:17.000000000","message":"Done","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"945fa704caeeace801e9bf528f2c3da9839ffe96","unresolved":true,"context_lines":[{"line_number":1423,"context_line":"\t\t}"},{"line_number":1424,"context_line":"\t\tswitch appliedAs {"},{"line_number":1425,"context_line":"\t\tcase \"Member\":"},{"line_number":1426,"context_line":"\t\t\terr \u003d s.store.AddGroupMember(username, groupName)"},{"line_number":1427,"context_line":"\t\tcase \"Owner\":"},{"line_number":1428,"context_line":"\t\t\terr \u003d s.store.AddGroupOwner(username, groupName)"},{"line_number":1429,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":2,"id":"f29f3ca9_7a9b41c3","line":1426,"updated":"2024-08-08 12:20:36.000000000","message":"these two operations, accepting invitation and updating membership/ownership tables must happen in the same transaction, otherwise you might end up in the inconsistent state.","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"16461623e48e2003907e6301120ff8843e1e7739","unresolved":false,"context_lines":[{"line_number":1423,"context_line":"\t\t}"},{"line_number":1424,"context_line":"\t\tswitch appliedAs {"},{"line_number":1425,"context_line":"\t\tcase \"Member\":"},{"line_number":1426,"context_line":"\t\t\terr \u003d s.store.AddGroupMember(username, groupName)"},{"line_number":1427,"context_line":"\t\tcase \"Owner\":"},{"line_number":1428,"context_line":"\t\t\terr \u003d s.store.AddGroupOwner(username, groupName)"},{"line_number":1429,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":2,"id":"64f9ebcf_c337f021","line":1426,"in_reply_to":"f29f3ca9_7a9b41c3","updated":"2024-08-11 08:59:17.000000000","message":"working on it.","commit_id":"73101ddc60360185b75735ee56496018fc6c22f4"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":62,"context_line":"\tAddSSHKeyForUser(username, sshKey string) error"},{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserApplication(user, group, reason, status string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"}],"source_content_type":"text/x-go","patch_set":8,"id":"cee426f9_8a81aeaf","line":65,"updated":"2024-08-12 08:39:34.000000000","message":"is status argument needed here? is not all new requests in pending state?","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\tAddSSHKeyForUser(username, sshKey string) error"},{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserApplication(user, group, reason, status string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"}],"source_content_type":"text/x-go","patch_set":8,"id":"b9ca8e81_50734a8f","line":65,"in_reply_to":"cee426f9_8a81aeaf","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserApplication(user, group, reason, status string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"},{"line_number":69,"context_line":"\tAcceptUserApplication(id int, username, groupName string, role MembershipType) error"}],"source_content_type":"text/x-go","patch_set":8,"id":"6c547afc_f7735e48","line":66,"updated":"2024-08-12 08:39:34.000000000","message":"same, is status needed here?","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserApplication(user, group, reason, status string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"},{"line_number":69,"context_line":"\tAcceptUserApplication(id int, username, groupName string, role MembershipType) error"}],"source_content_type":"text/x-go","patch_set":8,"id":"11ac8f60_55c66f81","line":66,"in_reply_to":"6c547afc_f7735e48","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"},{"line_number":69,"context_line":"\tAcceptUserApplication(id int, username, groupName string, role MembershipType) error"},{"line_number":70,"context_line":"\tRejectUserApplication(id int) error"},{"line_number":71,"context_line":"\tGetMembershipRequests(group string) ([]MembershipRequest, error)"},{"line_number":72,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":8,"id":"e43a1a07_3442973c","line":69,"updated":"2024-08-12 08:39:34.000000000","message":"this should take only id as well","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"\tUpdateUserApplication(id int, reason, status string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserApplications(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserApplication(id int) error"},{"line_number":69,"context_line":"\tAcceptUserApplication(id int, username, groupName string, role MembershipType) error"},{"line_number":70,"context_line":"\tRejectUserApplication(id int) error"},{"line_number":71,"context_line":"\tGetMembershipRequests(group string) ([]MembershipRequest, error)"},{"line_number":72,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":8,"id":"6ec1fbc0_fe9eb8bb","line":69,"in_reply_to":"e43a1a07_3442973c","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":103,"context_line":")"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"type MembershipRequest struct {"},{"line_number":106,"context_line":"\tID             int"},{"line_number":107,"context_line":"\tUser           string"},{"line_number":108,"context_line":"\tGroup          string"},{"line_number":109,"context_line":"\tReason         string"}],"source_content_type":"text/x-go","patch_set":8,"id":"6a253188_9d06c6f2","line":106,"updated":"2024-08-12 08:39:34.000000000","message":"better to have strings as ids as integers are limited in number of values they can get. you can leave them ints in the db but on api level it is better to use string just in case we need to change id generation logic in future","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":103,"context_line":")"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"type MembershipRequest struct {"},{"line_number":106,"context_line":"\tID             int"},{"line_number":107,"context_line":"\tUser           string"},{"line_number":108,"context_line":"\tGroup          string"},{"line_number":109,"context_line":"\tReason         string"}],"source_content_type":"text/x-go","patch_set":8,"id":"3990a492_9aef59df","line":106,"in_reply_to":"6a253188_9d06c6f2","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":749,"context_line":"\t\treturn nil, err"},{"line_number":750,"context_line":"\t}"},{"line_number":751,"context_line":"\tdefer rows.Close()"},{"line_number":752,"context_line":"\tvar applications []MembershipRequest"},{"line_number":753,"context_line":"\tfor rows.Next() {"},{"line_number":754,"context_line":"\t\tvar app MembershipRequest"},{"line_number":755,"context_line":"\t\terr :\u003d rows.Scan(\u0026app.ID, \u0026app.User, \u0026app.Group, \u0026app.Reason, \u0026app.MembershipType, \u0026app.Status)"}],"source_content_type":"text/x-go","patch_set":8,"id":"fe0c8589_f34108a1","line":752,"updated":"2024-08-12 08:39:34.000000000","message":"rename application to request everywhere","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":749,"context_line":"\t\treturn nil, err"},{"line_number":750,"context_line":"\t}"},{"line_number":751,"context_line":"\tdefer rows.Close()"},{"line_number":752,"context_line":"\tvar applications []MembershipRequest"},{"line_number":753,"context_line":"\tfor rows.Next() {"},{"line_number":754,"context_line":"\t\tvar app MembershipRequest"},{"line_number":755,"context_line":"\t\terr :\u003d rows.Scan(\u0026app.ID, \u0026app.User, \u0026app.Group, \u0026app.Reason, \u0026app.MembershipType, \u0026app.Status)"}],"source_content_type":"text/x-go","patch_set":8,"id":"acc7a419_decdd7e1","line":752,"in_reply_to":"fe0c8589_f34108a1","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":809,"context_line":"\t\tSET status \u003d \u0027accepted\u0027 "},{"line_number":810,"context_line":"\t\tWHERE id \u003d ? AND status \u003d \u0027pending\u0027`, id)"},{"line_number":811,"context_line":"\tif err !\u003d nil {"},{"line_number":812,"context_line":"\t\ttx.Rollback()"},{"line_number":813,"context_line":"\t\treturn fmt.Errorf(\"failed to update application status: %w\", err)"},{"line_number":814,"context_line":"\t}"},{"line_number":815,"context_line":"\trowsAffected, err :\u003d result.RowsAffected()"}],"source_content_type":"text/x-go","patch_set":8,"id":"4f7882a1_0425e71c","line":812,"updated":"2024-08-12 08:39:34.000000000","message":"i think rollback should be called in defer statement, no?","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":809,"context_line":"\t\tSET status \u003d \u0027accepted\u0027 "},{"line_number":810,"context_line":"\t\tWHERE id \u003d ? AND status \u003d \u0027pending\u0027`, id)"},{"line_number":811,"context_line":"\tif err !\u003d nil {"},{"line_number":812,"context_line":"\t\ttx.Rollback()"},{"line_number":813,"context_line":"\t\treturn fmt.Errorf(\"failed to update application status: %w\", err)"},{"line_number":814,"context_line":"\t}"},{"line_number":815,"context_line":"\trowsAffected, err :\u003d result.RowsAffected()"}],"source_content_type":"text/x-go","patch_set":8,"id":"2ce9ae0d_46f0534e","line":812,"in_reply_to":"4f7882a1_0425e71c","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":848,"context_line":"\t}"},{"line_number":849,"context_line":"\tdefer rows.Close()"},{"line_number":850,"context_line":"\tvar applications []MembershipRequest"},{"line_number":851,"context_line":"\tfor rows.Next() {"},{"line_number":852,"context_line":"\t\tvar app MembershipRequest"},{"line_number":853,"context_line":"\t\terr :\u003d rows.Scan(\u0026app.ID, \u0026app.User, \u0026app.Group, \u0026app.Reason, \u0026app.MembershipType, \u0026app.Status)"},{"line_number":854,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":8,"id":"4b433c23_c097d308","line":851,"updated":"2024-08-12 08:39:34.000000000","message":"extract this logic into a helper private function and reuse with get user requests method","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"8b50253a18c4573ada59bcd4945aec5f742e2143","unresolved":false,"context_lines":[{"line_number":848,"context_line":"\t}"},{"line_number":849,"context_line":"\tdefer rows.Close()"},{"line_number":850,"context_line":"\tvar applications []MembershipRequest"},{"line_number":851,"context_line":"\tfor rows.Next() {"},{"line_number":852,"context_line":"\t\tvar app MembershipRequest"},{"line_number":853,"context_line":"\t\terr :\u003d rows.Scan(\u0026app.ID, \u0026app.User, \u0026app.Group, \u0026app.Reason, \u0026app.MembershipType, \u0026app.Status)"},{"line_number":854,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":8,"id":"1d03ec0a_da879733","line":851,"in_reply_to":"4b433c23_c097d308","updated":"2024-08-12 20:04:06.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"ce53f14b7c9ec16d3e4775b44919421ba4705b26","unresolved":true,"context_lines":[{"line_number":1479,"context_line":"\t}"},{"line_number":1480,"context_line":"\tusername :\u003d r.FormValue(\"username\")"},{"line_number":1481,"context_line":"\tgroupName :\u003d r.FormValue(\"group\")"},{"line_number":1482,"context_line":"\t// reason :\u003d r.FormValue(\"reason\")"},{"line_number":1483,"context_line":"\tmembershipType :\u003d MembershipType(r.FormValue(\"membershipType\"))"},{"line_number":1484,"context_line":"\tstatus :\u003d RequestStatus(r.FormValue(\"status\"))"},{"line_number":1485,"context_line":"\taction :\u003d r.PostFormValue(\"action\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"519bf992_e5a1bfd0","line":1482,"updated":"2024-08-12 08:39:34.000000000","message":"comment ?","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"02b629bfee326b2edd9ab7d207853a65eaa709e3","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"\t}"},{"line_number":1480,"context_line":"\tusername :\u003d r.FormValue(\"username\")"},{"line_number":1481,"context_line":"\tgroupName :\u003d r.FormValue(\"group\")"},{"line_number":1482,"context_line":"\t// reason :\u003d r.FormValue(\"reason\")"},{"line_number":1483,"context_line":"\tmembershipType :\u003d MembershipType(r.FormValue(\"membershipType\"))"},{"line_number":1484,"context_line":"\tstatus :\u003d RequestStatus(r.FormValue(\"status\"))"},{"line_number":1485,"context_line":"\taction :\u003d r.PostFormValue(\"action\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"2aa385be_276b13f6","line":1482,"in_reply_to":"519bf992_e5a1bfd0","updated":"2024-08-12 13:53:22.000000000","message":"Done","commit_id":"e59de886a0fa3d34e99e92a785a3f6ce3392f237"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"}],"source_content_type":"text/x-go","patch_set":12,"id":"75f2d130_4de5cbd3","line":66,"updated":"2024-08-16 12:37:22.000000000","message":"We should not let user change membership type after initial request. That will lead to ambiguities.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"\tRemoveSSHKeyForUser(username, sshKey string) error"},{"line_number":64,"context_line":"\tCreateUser(user, email string) error"},{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"}],"source_content_type":"text/x-go","patch_set":12,"id":"7de42901_9d4ff154","line":66,"in_reply_to":"75f2d130_4de5cbd3","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"}],"source_content_type":"text/x-go","patch_set":12,"id":"690ae583_89402e84","line":68,"updated":"2024-08-16 12:37:22.000000000","message":"Let\u0027s get rid of the remove functionality for now. For historical reasons it makes sense to keep request history around. Owner of the group can always ignore and reject the request. And in future we can add functionality to re-activate previously rejected request.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"5aac96760df0546f694091289076eae2ab771c2a","unresolved":true,"context_lines":[{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"}],"source_content_type":"text/x-go","patch_set":12,"id":"a9037eee_322a1684","line":68,"in_reply_to":"379eb068_18781b42","updated":"2024-08-19 07:59:23.000000000","message":"Once you add remove functionality you can not control when user will use it.\n\nInstead of delete I would use \"deactivate\" or some similar functionality where request stays in the db but becomes inactive. But we don\u0027t need even that functionality just yet.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":true,"context_lines":[{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"}],"source_content_type":"text/x-go","patch_set":12,"id":"379eb068_18781b42","line":68,"in_reply_to":"690ae583_89402e84","updated":"2024-08-18 19:48:03.000000000","message":"This is for the person who applied. So why not give a possibility to just cancel request? Maybe he changed his mind and doesn\u0027t want to be in that group? Or maybe he mistakenly applied in a wrong group?\n\nto keep history, only modified handler to allow deleting only when status is pending.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":65,"context_line":"\tAddUserMembershipRequest(user, group, reason string, membershipType MembershipType) error"},{"line_number":66,"context_line":"\tUpdateUserMembershipRequest(id int, reason string, membershipType MembershipType) error"},{"line_number":67,"context_line":"\tGetUserMembershipRequests(user string) ([]MembershipRequest, error)"},{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"}],"source_content_type":"text/x-go","patch_set":12,"id":"ea09e070_55bedd70","line":68,"in_reply_to":"a9037eee_322a1684","updated":"2024-08-19 22:53:46.000000000","message":"removed that functionality compeletly for now.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"},{"line_number":72,"context_line":"\tGetMembershipRequests(group string) ([]MembershipRequest, error)"},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-go","patch_set":12,"id":"3fba5f6e_2c209f41","line":71,"updated":"2024-08-16 12:37:22.000000000","message":"ById","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\tRemoveUserMembershipRequest(id int) error"},{"line_number":69,"context_line":"\tAcceptUserMembershipRequest(id int) error"},{"line_number":70,"context_line":"\tRejectUserMembershipRequest(id int) error"},{"line_number":71,"context_line":"\tGetUserMembershipRequestByID(id int) (MembershipRequest, error)"},{"line_number":72,"context_line":"\tGetMembershipRequests(group string) ([]MembershipRequest, error)"},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-go","patch_set":12,"id":"3ec77a33_1f7c669e","line":71,"in_reply_to":"3fba5f6e_2c209f41","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":104,"context_line":")"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"type MembershipRequest struct {"},{"line_number":107,"context_line":"\tID             string"},{"line_number":108,"context_line":"\tUser           string"},{"line_number":109,"context_line":"\tGroup          string"},{"line_number":110,"context_line":"\tReason         string"}],"source_content_type":"text/x-go","patch_set":12,"id":"ad714719_ee0726f0","line":107,"updated":"2024-08-16 12:37:22.000000000","message":"Id","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":104,"context_line":")"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"type MembershipRequest struct {"},{"line_number":107,"context_line":"\tID             string"},{"line_number":108,"context_line":"\tUser           string"},{"line_number":109,"context_line":"\tGroup          string"},{"line_number":110,"context_line":"\tReason         string"}],"source_content_type":"text/x-go","patch_set":12,"id":"c2532fb0_870cb957","line":107,"in_reply_to":"ad714719_ee0726f0","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":153,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name),"},{"line_number":154,"context_line":"\t\t\tUNIQUE (username, group_name)"},{"line_number":155,"context_line":"\t\t);"},{"line_number":156,"context_line":"\t\tCREATE TABLE IF NOT EXISTS user_applications ("},{"line_number":157,"context_line":"\t\t\tid INTEGER PRIMARY KEY AUTOINCREMENT,"},{"line_number":158,"context_line":"\t\t\tusername TEXT,"},{"line_number":159,"context_line":"\t\t\tgroup_name TEXT,"}],"source_content_type":"text/x-go","patch_set":12,"id":"c2cd85c9_6f9048b8","line":156,"updated":"2024-08-16 12:37:22.000000000","message":"Rename to membership_requests","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":153,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name),"},{"line_number":154,"context_line":"\t\t\tUNIQUE (username, group_name)"},{"line_number":155,"context_line":"\t\t);"},{"line_number":156,"context_line":"\t\tCREATE TABLE IF NOT EXISTS user_applications ("},{"line_number":157,"context_line":"\t\t\tid INTEGER PRIMARY KEY AUTOINCREMENT,"},{"line_number":158,"context_line":"\t\t\tusername TEXT,"},{"line_number":159,"context_line":"\t\t\tgroup_name TEXT,"}],"source_content_type":"text/x-go","patch_set":12,"id":"a2a26c3a_ce800378","line":156,"in_reply_to":"c2cd85c9_6f9048b8","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":158,"context_line":"\t\t\tusername TEXT,"},{"line_number":159,"context_line":"\t\t\tgroup_name TEXT,"},{"line_number":160,"context_line":"\t\t\treason TEXT,"},{"line_number":161,"context_line":"\t\t\tapply_as TEXT,"},{"line_number":162,"context_line":"\t\t\tstatus TEXT,"},{"line_number":163,"context_line":"\t\t\tFOREIGN KEY(username) REFERENCES users(username),"},{"line_number":164,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name)"}],"source_content_type":"text/x-go","patch_set":12,"id":"20ce33fe_d43498bc","line":161,"updated":"2024-08-16 12:37:22.000000000","message":"This should have been renamed to membership_type when renaming same field in the struct. rename apply as to membership type across whole change request.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"\t\t\tusername TEXT,"},{"line_number":159,"context_line":"\t\t\tgroup_name TEXT,"},{"line_number":160,"context_line":"\t\t\treason TEXT,"},{"line_number":161,"context_line":"\t\t\tapply_as TEXT,"},{"line_number":162,"context_line":"\t\t\tstatus TEXT,"},{"line_number":163,"context_line":"\t\t\tFOREIGN KEY(username) REFERENCES users(username),"},{"line_number":164,"context_line":"\t\t\tFOREIGN KEY(group_name) REFERENCES groups(name)"}],"source_content_type":"text/x-go","patch_set":12,"id":"bc500a5a_35aa2eff","line":161,"in_reply_to":"20ce33fe_d43498bc","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":717,"context_line":"\t\tuser, group, reason, membershipType, StatusPending)"},{"line_number":718,"context_line":"\tif err !\u003d nil {"},{"line_number":719,"context_line":"\t\tsqliteErr, ok :\u003d err.(*sqlite3.Error)"},{"line_number":720,"context_line":"\t\tif ok \u0026\u0026 sqliteErr.ExtendedCode() \u003d\u003d ErrorUniqueConstraintViolation {"},{"line_number":721,"context_line":"\t\t\treturn fmt.Errorf(\"%s already applied as %s in group %s\", user, membershipType, group)"},{"line_number":722,"context_line":"\t\t}"},{"line_number":723,"context_line":"\t\treturn fmt.Errorf(\"failed to insert request: %w\", err)"}],"source_content_type":"text/x-go","patch_set":12,"id":"5f000180_1d05abc4","line":720,"updated":"2024-08-16 12:37:22.000000000","message":"Have you checked if this error ever gets fired? I don\u0027t see corresponding unique constraint in table definition.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":717,"context_line":"\t\tuser, group, reason, membershipType, StatusPending)"},{"line_number":718,"context_line":"\tif err !\u003d nil {"},{"line_number":719,"context_line":"\t\tsqliteErr, ok :\u003d err.(*sqlite3.Error)"},{"line_number":720,"context_line":"\t\tif ok \u0026\u0026 sqliteErr.ExtendedCode() \u003d\u003d ErrorUniqueConstraintViolation {"},{"line_number":721,"context_line":"\t\t\treturn fmt.Errorf(\"%s already applied as %s in group %s\", user, membershipType, group)"},{"line_number":722,"context_line":"\t\t}"},{"line_number":723,"context_line":"\t\treturn fmt.Errorf(\"failed to insert request: %w\", err)"}],"source_content_type":"text/x-go","patch_set":12,"id":"ff92031b_f64110d1","line":720,"in_reply_to":"5f000180_1d05abc4","updated":"2024-08-18 19:48:03.000000000","message":"u right. we don\u0027t have any unique constrains for table cos we have to keep history, so just doing a query to check if this user has a pending request for a group and in this case giving error","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":false,"context_lines":[{"line_number":717,"context_line":"\t\tuser, group, reason, membershipType, StatusPending)"},{"line_number":718,"context_line":"\tif err !\u003d nil {"},{"line_number":719,"context_line":"\t\tsqliteErr, ok :\u003d err.(*sqlite3.Error)"},{"line_number":720,"context_line":"\t\tif ok \u0026\u0026 sqliteErr.ExtendedCode() \u003d\u003d ErrorUniqueConstraintViolation {"},{"line_number":721,"context_line":"\t\t\treturn fmt.Errorf(\"%s already applied as %s in group %s\", user, membershipType, group)"},{"line_number":722,"context_line":"\t\t}"},{"line_number":723,"context_line":"\t\treturn fmt.Errorf(\"failed to insert request: %w\", err)"}],"source_content_type":"text/x-go","patch_set":12,"id":"f897ab31_9b265d72","line":720,"in_reply_to":"ff92031b_f64110d1","updated":"2024-08-19 08:07:41.000000000","message":"Once user opens request for a specific group with specific membership type, even if owner rejects the request and user re-requests the membership of that group again we should just reactivate that old request instead of opening the new one.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":759,"context_line":"\treturn req, nil"},{"line_number":760,"context_line":"}"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"func scanRequests(db *sql.DB, query string, args ...interface{}) ([]MembershipRequest, error) {"},{"line_number":763,"context_line":"\trows, err :\u003d db.Query(query, args...)"},{"line_number":764,"context_line":"\tif err !\u003d nil {"},{"line_number":765,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":12,"id":"3e191570_6abecd60","line":762,"updated":"2024-08-16 12:37:22.000000000","message":"Replace `interface{}` with `any`","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":759,"context_line":"\treturn req, nil"},{"line_number":760,"context_line":"}"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"func scanRequests(db *sql.DB, query string, args ...interface{}) ([]MembershipRequest, error) {"},{"line_number":763,"context_line":"\trows, err :\u003d db.Query(query, args...)"},{"line_number":764,"context_line":"\tif err !\u003d nil {"},{"line_number":765,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":12,"id":"e882ee74_fc7e36ec","line":762,"in_reply_to":"3e191570_6abecd60","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":770,"context_line":"\t\tvar req MembershipRequest"},{"line_number":771,"context_line":"\t\tvar id int"},{"line_number":772,"context_line":"\t\terr :\u003d rows.Scan(\u0026id, \u0026req.User, \u0026req.Group, \u0026req.Reason, \u0026req.MembershipType, \u0026req.Status)"},{"line_number":773,"context_line":"\t\treq.ID \u003d fmt.Sprintf(\"%d\", id)"},{"line_number":774,"context_line":"\t\tif err !\u003d nil {"},{"line_number":775,"context_line":"\t\t\treturn nil, err"},{"line_number":776,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":12,"id":"7c1bfb62_6acf7104","line":773,"updated":"2024-08-16 12:37:22.000000000","message":"Use `strconv.Itoa`","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":770,"context_line":"\t\tvar req MembershipRequest"},{"line_number":771,"context_line":"\t\tvar id int"},{"line_number":772,"context_line":"\t\terr :\u003d rows.Scan(\u0026id, \u0026req.User, \u0026req.Group, \u0026req.Reason, \u0026req.MembershipType, \u0026req.Status)"},{"line_number":773,"context_line":"\t\treq.ID \u003d fmt.Sprintf(\"%d\", id)"},{"line_number":774,"context_line":"\t\tif err !\u003d nil {"},{"line_number":775,"context_line":"\t\t\treturn nil, err"},{"line_number":776,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":12,"id":"daae9d59_a1453eff","line":773,"in_reply_to":"7c1bfb62_6acf7104","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"d257280c138144acc56e0acb29ab7eee29777c2f","unresolved":true,"context_lines":[{"line_number":1496,"context_line":"\t\t\treturn"},{"line_number":1497,"context_line":"\t\t}"},{"line_number":1498,"context_line":"\t}"},{"line_number":1499,"context_line":"\t// username :\u003d r.FormValue(\"username\")"},{"line_number":1500,"context_line":"\tgroupName :\u003d r.FormValue(\"group\")"},{"line_number":1501,"context_line":"\tmembershipType :\u003d MembershipType(r.FormValue(\"membershipType\"))"},{"line_number":1502,"context_line":"\tstatus :\u003d RequestStatus(r.FormValue(\"status\"))"}],"source_content_type":"text/x-go","patch_set":12,"id":"0771d141_66d1462a","line":1499,"updated":"2024-08-16 12:37:22.000000000","message":"comment","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"\t\t\treturn"},{"line_number":1497,"context_line":"\t\t}"},{"line_number":1498,"context_line":"\t}"},{"line_number":1499,"context_line":"\t// username :\u003d r.FormValue(\"username\")"},{"line_number":1500,"context_line":"\tgroupName :\u003d r.FormValue(\"group\")"},{"line_number":1501,"context_line":"\tmembershipType :\u003d MembershipType(r.FormValue(\"membershipType\"))"},{"line_number":1502,"context_line":"\tstatus :\u003d RequestStatus(r.FormValue(\"status\"))"}],"source_content_type":"text/x-go","patch_set":12,"id":"6bde23ce_c30dfe27","line":1499,"in_reply_to":"0771d141_66d1462a","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":1179,"context_line":"\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)"},{"line_number":1180,"context_line":"\t\t\treturn"},{"line_number":1181,"context_line":"\t\t}"},{"line_number":1182,"context_line":"\t\tfor _, apply :\u003d range requests {"},{"line_number":1183,"context_line":"\t\t\tif apply.Group \u003d\u003d groupName \u0026\u0026 apply.Status \u003d\u003d \"pending\" {"},{"line_number":1184,"context_line":"\t\t\t\trequest \u003d \u0026apply"},{"line_number":1185,"context_line":"\t\t\t\tbreak"}],"source_content_type":"text/x-go","patch_set":13,"id":"f7c9ac8f_828fc067","line":1182,"updated":"2024-08-19 08:07:41.000000000","message":"apply","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)"},{"line_number":1180,"context_line":"\t\t\treturn"},{"line_number":1181,"context_line":"\t\t}"},{"line_number":1182,"context_line":"\t\tfor _, apply :\u003d range requests {"},{"line_number":1183,"context_line":"\t\t\tif apply.Group \u003d\u003d groupName \u0026\u0026 apply.Status \u003d\u003d \"pending\" {"},{"line_number":1184,"context_line":"\t\t\t\trequest \u003d \u0026apply"},{"line_number":1185,"context_line":"\t\t\t\tbreak"}],"source_content_type":"text/x-go","patch_set":13,"id":"09bf2266_1ad626f5","line":1182,"in_reply_to":"f7c9ac8f_828fc067","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":1403,"context_line":"\thttp.Redirect(w, r, \"/group/\"+ownedGroup, http.StatusSeeOther)"},{"line_number":1404,"context_line":"}"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"func (s *Server) applyUserIntoGroupHandler(w http.ResponseWriter, r *http.Request) {"},{"line_number":1407,"context_line":"\tloggedInUser, err :\u003d getLoggedInUser(r)"},{"line_number":1408,"context_line":"\tif err !\u003d nil {"},{"line_number":1409,"context_line":"\t\thttp.Error(w, \"User Not Logged In\", http.StatusUnauthorized)"}],"source_content_type":"text/x-go","patch_set":13,"id":"5441823b_afda36eb","line":1406,"updated":"2024-08-19 08:07:41.000000000","message":"rename","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":1403,"context_line":"\thttp.Redirect(w, r, \"/group/\"+ownedGroup, http.StatusSeeOther)"},{"line_number":1404,"context_line":"}"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"func (s *Server) applyUserIntoGroupHandler(w http.ResponseWriter, r *http.Request) {"},{"line_number":1407,"context_line":"\tloggedInUser, err :\u003d getLoggedInUser(r)"},{"line_number":1408,"context_line":"\tif err !\u003d nil {"},{"line_number":1409,"context_line":"\t\thttp.Error(w, \"User Not Logged In\", http.StatusUnauthorized)"}],"source_content_type":"text/x-go","patch_set":13,"id":"98d62815_f1ac5d18","line":1406,"in_reply_to":"5441823b_afda36eb","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"}],"core/auth/memberships/memberships-tmpl/group.html":[{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    \u003ch3\u003ePending Requests\u003c/h3\u003e"},{"line_number":133,"context_line":"    \u003cdiv id\u003d\"application-grid\" class\u003d\"pending-applications\"\u003e"},{"line_number":134,"context_line":"        \u003ch4\u003eUsername\u003c/h4\u003e"},{"line_number":135,"context_line":"        \u003ch4\u003eApplied As\u003c/h4\u003e"},{"line_number":136,"context_line":"        \u003ch4\u003eReason\u003c/h4\u003e"},{"line_number":137,"context_line":"        {{/*  \u003ch3\u003eStatus\u003c/h3\u003e  */}}"},{"line_number":138,"context_line":"        \u003ch4 class\u003d\"action-header\"\u003eAction\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"f7a5f6e1_071ca12a","line":135,"updated":"2024-08-19 08:07:41.000000000","message":"apply","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"27e71a315e6e31e62cacd1406a2afdc2b6e1f206","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    \u003ch3\u003ePending Requests\u003c/h3\u003e"},{"line_number":133,"context_line":"    \u003cdiv id\u003d\"application-grid\" class\u003d\"pending-applications\"\u003e"},{"line_number":134,"context_line":"        \u003ch4\u003eUsername\u003c/h4\u003e"},{"line_number":135,"context_line":"        \u003ch4\u003eApplied As\u003c/h4\u003e"},{"line_number":136,"context_line":"        \u003ch4\u003eReason\u003c/h4\u003e"},{"line_number":137,"context_line":"        {{/*  \u003ch3\u003eStatus\u003c/h3\u003e  */}}"},{"line_number":138,"context_line":"        \u003ch4 class\u003d\"action-header\"\u003eAction\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"d0cd5991_5b2d8666","line":135,"in_reply_to":"0f5fc8b2_7678ea54","updated":"2024-08-20 07:59:41.000000000","message":"I meant you were still using apply terminology and should use membership type instead","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"509e8e9c0f75fc9bbdf9ccdaf6732f7d3d1a25ad","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    \u003ch3\u003ePending Requests\u003c/h3\u003e"},{"line_number":133,"context_line":"    \u003cdiv id\u003d\"application-grid\" class\u003d\"pending-applications\"\u003e"},{"line_number":134,"context_line":"        \u003ch4\u003eUsername\u003c/h4\u003e"},{"line_number":135,"context_line":"        \u003ch4\u003eApplied As\u003c/h4\u003e"},{"line_number":136,"context_line":"        \u003ch4\u003eReason\u003c/h4\u003e"},{"line_number":137,"context_line":"        {{/*  \u003ch3\u003eStatus\u003c/h3\u003e  */}}"},{"line_number":138,"context_line":"        \u003ch4 class\u003d\"action-header\"\u003eAction\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"d235c3ed_6fdb734a","line":135,"in_reply_to":"d0cd5991_5b2d8666","updated":"2024-08-20 09:56:33.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    \u003ch3\u003ePending Requests\u003c/h3\u003e"},{"line_number":133,"context_line":"    \u003cdiv id\u003d\"application-grid\" class\u003d\"pending-applications\"\u003e"},{"line_number":134,"context_line":"        \u003ch4\u003eUsername\u003c/h4\u003e"},{"line_number":135,"context_line":"        \u003ch4\u003eApplied As\u003c/h4\u003e"},{"line_number":136,"context_line":"        \u003ch4\u003eReason\u003c/h4\u003e"},{"line_number":137,"context_line":"        {{/*  \u003ch3\u003eStatus\u003c/h3\u003e  */}}"},{"line_number":138,"context_line":"        \u003ch4 class\u003d\"action-header\"\u003eAction\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"0f5fc8b2_7678ea54","line":135,"in_reply_to":"f7a5f6e1_071ca12a","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        {{ end }}"},{"line_number":167,"context_line":"    \u003c/div\u003e"},{"line_number":168,"context_line":"    {{ else }}"},{"line_number":169,"context_line":"        \u003ch3\u003eApply to Group\u003c/h3\u003e"},{"line_number":170,"context_line":"        \u003cform id\u003d\"apply-form\" action\u003d\"/group/{{ .GroupName }}/apply-user/\" method\u003d\"post\"\u003e"},{"line_number":171,"context_line":"            {{/*  \u003cinput type\u003d\"hidden\" name\u003d\"action-type\" value\u003d\"{{ if .Request }}edit{{ else }}new{{ end }}\"\u003e  */}}"},{"line_number":172,"context_line":"            \u003cfieldset class\u003d\"grid application\" id\u003d\"application-fieldset\"\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"7280b6cf_4a52a207","line":169,"updated":"2024-08-19 08:07:41.000000000","message":"Request Membership","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        {{ end }}"},{"line_number":167,"context_line":"    \u003c/div\u003e"},{"line_number":168,"context_line":"    {{ else }}"},{"line_number":169,"context_line":"        \u003ch3\u003eApply to Group\u003c/h3\u003e"},{"line_number":170,"context_line":"        \u003cform id\u003d\"apply-form\" action\u003d\"/group/{{ .GroupName }}/apply-user/\" method\u003d\"post\"\u003e"},{"line_number":171,"context_line":"            {{/*  \u003cinput type\u003d\"hidden\" name\u003d\"action-type\" value\u003d\"{{ if .Request }}edit{{ else }}new{{ end }}\"\u003e  */}}"},{"line_number":172,"context_line":"            \u003cfieldset class\u003d\"grid application\" id\u003d\"application-fieldset\"\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"7b2f0499_394549c7","line":169,"in_reply_to":"7280b6cf_4a52a207","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":167,"context_line":"    \u003c/div\u003e"},{"line_number":168,"context_line":"    {{ else }}"},{"line_number":169,"context_line":"        \u003ch3\u003eApply to Group\u003c/h3\u003e"},{"line_number":170,"context_line":"        \u003cform id\u003d\"apply-form\" action\u003d\"/group/{{ .GroupName }}/apply-user/\" method\u003d\"post\"\u003e"},{"line_number":171,"context_line":"            {{/*  \u003cinput type\u003d\"hidden\" name\u003d\"action-type\" value\u003d\"{{ if .Request }}edit{{ else }}new{{ end }}\"\u003e  */}}"},{"line_number":172,"context_line":"            \u003cfieldset class\u003d\"grid application\" id\u003d\"application-fieldset\"\u003e"},{"line_number":173,"context_line":"                \u003cselect id\u003d\"membership-type\" name\u003d\"membership-type\" required {{ if .Request }}disabled{{ end }}\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"23e33d35_839db3da","line":170,"updated":"2024-08-19 08:07:41.000000000","message":"still using old naming of \"apply\" here instead of \"request\" or \"membership_request\"","commit_id":"00657fd754686a5897bbb30f477db4a945143750"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u003c/div\u003e"},{"line_number":168,"context_line":"    {{ else }}"},{"line_number":169,"context_line":"        \u003ch3\u003eApply to Group\u003c/h3\u003e"},{"line_number":170,"context_line":"        \u003cform id\u003d\"apply-form\" action\u003d\"/group/{{ .GroupName }}/apply-user/\" method\u003d\"post\"\u003e"},{"line_number":171,"context_line":"            {{/*  \u003cinput type\u003d\"hidden\" name\u003d\"action-type\" value\u003d\"{{ if .Request }}edit{{ else }}new{{ end }}\"\u003e  */}}"},{"line_number":172,"context_line":"            \u003cfieldset class\u003d\"grid application\" id\u003d\"application-fieldset\"\u003e"},{"line_number":173,"context_line":"                \u003cselect id\u003d\"membership-type\" name\u003d\"membership-type\" required {{ if .Request }}disabled{{ end }}\u003e"}],"source_content_type":"text/html","patch_set":13,"id":"45321338_449e94d7","line":170,"in_reply_to":"23e33d35_839db3da","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"00657fd754686a5897bbb30f477db4a945143750"}],"core/auth/memberships/static/main.js":[{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"793a2210e26c9e2ca5b2d2fd14701df8a7beffa4","unresolved":true,"context_lines":[{"line_number":11,"context_line":"function keydownHandler(event) {"},{"line_number":12,"context_line":"    if (event.key \u003d\u003d\u003d \"Escape\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"},{"line_number":13,"context_line":"        hideConfirmationDialog();"},{"line_number":14,"context_line":"    } else if (event.key \u003d\u003d\u003d \"Enter\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"},{"line_number":15,"context_line":"        confirmButton.click();"},{"line_number":16,"context_line":"    }"},{"line_number":17,"context_line":"}"}],"source_content_type":"text/javascript","patch_set":12,"id":"7c1ecb23_7c0c85b9","line":14,"updated":"2024-08-16 12:59:59.000000000","message":"Issue here was not that `Enter` keypress was working incorrectly, but rather which button (from `Cancel` and `Confirm` is active by default). Enter activates currently active button, and since in our case `Cancel` is active by default it cancels the request. Proper fix is `Confirm` button to be selected by default, and leave `Enter` keypress handler unchanged.","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"11b455b793e2946b4e4dff79d9aad515a2f8683f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"function keydownHandler(event) {"},{"line_number":12,"context_line":"    if (event.key \u003d\u003d\u003d \"Escape\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"},{"line_number":13,"context_line":"        hideConfirmationDialog();"},{"line_number":14,"context_line":"    } else if (event.key \u003d\u003d\u003d \"Enter\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"},{"line_number":15,"context_line":"        confirmButton.click();"},{"line_number":16,"context_line":"    }"},{"line_number":17,"context_line":"}"}],"source_content_type":"text/javascript","patch_set":12,"id":"04cf5404_e2d64c85","line":14,"in_reply_to":"7c1ecb23_7c0c85b9","updated":"2024-08-18 19:48:03.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000000,"name":"gio","email":"gio@v1.dodo.cloud","username":"gio"},"change_message_id":"b53aaec56a6ec82fed75a42212d5c39e27ca3f29","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    if (errorMessageDialog) {"},{"line_number":84,"context_line":"        document.addEventListener(\"keydown\", function (event) {"},{"line_number":85,"context_line":"            if (event.key \u003d\u003d\u003d \"Escape\") {"},{"line_number":86,"context_line":"                errorMessageDialog.close();"},{"line_number":87,"context_line":"            } else if (event.key \u003d\u003d\u003d \"Enter\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"}],"source_content_type":"text/javascript","patch_set":12,"id":"91aea2a2_c4745eac","line":84,"updated":"2024-08-19 08:07:41.000000000","message":"why are not we re-using keydown and outsidemodal handler functions defined above here?","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"},{"author":{"_account_id":1000001,"name":"dtabidze","email":"dtabidze@v1.dodo.cloud","username":"dtabidze"},"change_message_id":"6b9b3fbfee31996f6149bfa32c47780d6c378916","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    if (errorMessageDialog) {"},{"line_number":84,"context_line":"        document.addEventListener(\"keydown\", function (event) {"},{"line_number":85,"context_line":"            if (event.key \u003d\u003d\u003d \"Escape\") {"},{"line_number":86,"context_line":"                errorMessageDialog.close();"},{"line_number":87,"context_line":"            } else if (event.key \u003d\u003d\u003d \"Enter\" \u0026\u0026 activeModalStatus \u0026\u0026 activeModal \u003d\u003d\u003d \"confirmation\") {"}],"source_content_type":"text/javascript","patch_set":12,"id":"6106b591_1df65eb0","line":84,"in_reply_to":"91aea2a2_c4745eac","updated":"2024-08-19 22:53:46.000000000","message":"Done","commit_id":"6b2fc72d1dbe9f17551a5532d11af193ee46e76f"}]}
