iferr:=tx.QueryRow(ctx,`SELECT id::text FROM user_account WHERE tenant_id=$1::uuid AND public_id=$2::uuid AND status='active'`,locked.tenantID,input.GranteeUserID).Scan(&granteeID);errors.Is(err,pgx.ErrNoRows){
returnidempotency.Result{},ErrAccessDenied
}elseiferr!=nil{
returnidempotency.Result{},err
}
if_,err:=tx.Exec(ctx,`UPDATE sharing_grant SET revoked_at=now(),revoked_by=$1::uuid,version=version+1,updated_at=now() WHERE tenant_id=$2::uuid AND resource_type=$3 AND resource_public_id=$4::uuid AND grantee_user_id=$5::uuid AND permission=$6 AND revoked_at IS NULL AND expires_at>now()`,actorID,locked.tenantID,input.ResourceType,input.ResourceID,granteeID,input.Permission);err!=nil{
returnidempotency.Result{},err
}
varitemGrant
err=tx.QueryRow(ctx,`INSERT INTO sharing_grant(public_id,tenant_id,household_id,subject_id,resource_type,resource_public_id,grantee_user_id,permission,purpose,login_required,access_token_digest,granted_by,expires_at) VALUES($1::uuid,$2::uuid,$3::uuid,$4::uuid,$5,$6::uuid,$7::uuid,$8,$9,$10,$11,$12::uuid,$13) RETURNING public_id::text,$14::text,resource_type,resource_public_id::text,$15::text,permission,purpose,login_required,$16::text,granted_at,expires_at,revoked_at,version`,grantPublicID,locked.tenantID,locked.householdID,locked.subjectID,input.ResourceType,input.ResourceID,granteeID,input.Permission,input.Purpose,input.LoginRequired,tokenDigest,actorID,input.ExpiresAt,locked.subjectPublicID,input.GranteeUserID,actorPublicID).Scan(&item.ID,&item.SubjectID,&item.ResourceType,&item.ResourceID,&item.GranteeUserID,&item.Permission,&item.Purpose,&item.LoginRequired,&item.GrantedBy,&item.GrantedAt,&item.ExpiresAt,&item.RevokedAt,&item.Version)
err:=s.pool.QueryRow(ctx,`SELECT sp.tenant_id::text,sp.id::text FROM subject_profile sp JOIN household_member hm ON hm.tenant_id=sp.tenant_id AND hm.household_id=sp.household_id AND hm.status='active' JOIN user_account ua ON ua.id=hm.user_id AND ua.tenant_id=sp.tenant_id AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active' WHERE sp.public_id=$1::uuid AND sp.status='active' AND hm.role IN('owner','admin')`,subjectPublicID,principal.Issuer,principal.Subject).Scan(&tenantID,&subjectID)
iferrors.Is(err,pgx.ErrNoRows){
returnnil,ErrAccessDenied
}
iferr!=nil{
returnnil,err
}
rows,err:=s.pool.Query(ctx,`SELECT sg.public_id::text,$3::text,sg.resource_type,sg.resource_public_id::text,grantee.public_id::text,sg.permission,sg.purpose,sg.login_required,grantor.public_id::text,sg.granted_at,sg.expires_at,sg.revoked_at,sg.version FROM sharing_grant sg JOIN user_account grantee ON grantee.id=sg.grantee_user_id AND grantee.tenant_id=sg.tenant_id JOIN user_account grantor ON grantor.id=sg.granted_by AND grantor.tenant_id=sg.tenant_id WHERE sg.tenant_id=$1::uuid AND sg.subject_id=$2::uuid ORDER BY sg.granted_at DESC LIMIT 200`,tenantID,subjectID,subjectPublicID)
err=tx.QueryRow(ctx,`SELECT sg.tenant_id::text,ua.id::text,ua.public_id::text,hm.role,sg.public_id::text,sp.public_id::text,sg.resource_type,sg.resource_public_id::text,grantee.public_id::text,sg.permission,sg.purpose,sg.login_required,grantor.public_id::text,sg.granted_at,sg.expires_at,sg.revoked_at,sg.version FROM sharing_grant sg JOIN subject_profile sp ON sp.id=sg.subject_id AND sp.tenant_id=sg.tenant_id JOIN household_member hm ON hm.tenant_id=sg.tenant_id AND hm.household_id=sg.household_id AND hm.status='active' JOIN user_account ua ON ua.id=hm.user_id AND ua.tenant_id=sg.tenant_id AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active' JOIN user_account grantee ON grantee.id=sg.grantee_user_id JOIN user_account grantor ON grantor.id=sg.granted_by WHERE sg.public_id=$1::uuid FOR UPDATE OF sg`,grantPublicID,principal.Issuer,principal.Subject).Scan(&tenantID,&actorID,&actorPublicID,&role,&item.ID,&item.SubjectID,&item.ResourceType,&item.ResourceID,&item.GranteeUserID,&item.Permission,&item.Purpose,&item.LoginRequired,&item.GrantedBy,&item.GrantedAt,&item.ExpiresAt,&item.RevokedAt,&item.Version)
iferrors.Is(err,pgx.ErrNoRows){
returnitem,ErrNotFound
}
iferr!=nil{
returnitem,err
}
ifrole!="owner"&&role!="admin"{
returnitem,ErrAccessDenied
}
ifitem.RevokedAt==nil{
err=tx.QueryRow(ctx,`UPDATE sharing_grant SET revoked_at=now(),revoked_by=$2::uuid,version=version+1,updated_at=now() WHERE public_id=$1::uuid RETURNING revoked_at,version`,grantPublicID,actorID).Scan(&item.RevokedAt,&item.Version)
err:=s.pool.QueryRow(ctx,`SELECT sg.id::text,sg.tenant_id::text,COALESCE(ua.id::text,''),sg.resource_type,sg.resource_public_id::text,sg.permission,COALESCE(ua.id=sg.grantee_user_id,false), (sg.revoked_at IS NULL AND sg.expires_at>now()) FROM sharing_grant sg LEFT JOIN user_account ua ON ua.tenant_id=sg.tenant_id AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active' WHERE sg.public_id=$1::uuid`,grantPublicID,principal.Issuer,principal.Subject).Scan(&grantID,&tenantID,&userID,&resourceType,&resourceID,&permission,&allowed,&active)
err=s.pool.QueryRow(ctx,`SELECT sd.title,sr.content,sd.version,sr.revision_no FROM story_draft sd JOIN story_revision sr ON sr.id=sd.current_revision_id WHERE sd.public_id=$1::uuid AND sd.status<>'SUPERSEDED' AND call_story_available(sd.id)`,resourceID).Scan(&shared.Title,&shared.Text,&shared.Version,&shared.RevisionNo)
rows,qerr:=s.pool.Query(ctx,`SELECT ct.sequence_no,ct.speaker,ct.start_at,ct.end_at,ct.final_text,ct.interrupted FROM conversation_turn ct JOIN conversation c ON c.id=ct.conversation_id WHERE c.public_id=$1::uuid ORDER BY ct.sequence_no LIMIT 1000`,resourceID)
err=s.pool.QueryRow(ctx,`SELECT ms.object_ref,ms.content_type,ms.track,ms.sequence_no,c.public_id::text,EXISTS(SELECT 1 FROM consent_record cr WHERE cr.tenant_id=ms.tenant_id AND cr.subject_id=c.subject_id AND cr.consent_type='raw_audio_storage' AND cr.withdrawn_at IS NULL AND (cr.expires_at IS NULL OR cr.expires_at>now())) FROM media_segment ms JOIN conversation c ON c.id=ms.conversation_id WHERE ms.public_id=$1::uuid AND ms.status='VERIFIED'`,resourceID).Scan(&objectRef,&contentType,&track,&sequence,&conversationPublicID,&consent)
err:=s.pool.QueryRow(ctx,`SELECT id::text,tenant_id::text,resource_type,resource_public_id::text,permission,COALESCE(access_token_digest,''),(revoked_at IS NULL AND expires_at>now()),login_required FROM sharing_grant WHERE public_id=$1::uuid`,grantPublicID).Scan(&grantID,&tenantID,&resourceType,&resourceID,&permission,&storedDigest,&active,&loginRequired)
err:=s.pool.QueryRow(ctx,`SELECT sd.title,sr.content,sd.version,sr.revision_no FROM story_draft sd JOIN story_revision sr ON sr.id=sd.current_revision_id WHERE sd.public_id=$1::uuid AND sd.status<>'SUPERSEDED' AND call_story_available(sd.id)`,resourceID).Scan(&shared.Title,&shared.Text,&shared.Version,&shared.RevisionNo)
rows,err:=s.pool.Query(ctx,`SELECT ct.sequence_no,ct.speaker,ct.start_at,ct.end_at,ct.final_text,ct.interrupted FROM conversation_turn ct JOIN conversation c ON c.id=ct.conversation_id WHERE c.public_id=$1::uuid ORDER BY ct.sequence_no LIMIT 1000`,resourceID)
err:=s.pool.QueryRow(ctx,`SELECT ms.object_ref,ms.content_type,ms.track,ms.sequence_no,c.public_id::text,EXISTS(SELECT 1 FROM consent_record cr WHERE cr.tenant_id=ms.tenant_id AND cr.subject_id=c.subject_id AND cr.consent_type='raw_audio_storage' AND cr.withdrawn_at IS NULL AND (cr.expires_at IS NULL OR cr.expires_at>now())) FROM media_segment ms JOIN conversation c ON c.id=ms.conversation_id WHERE ms.public_id=$1::uuid AND ms.status='VERIFIED'`,resourceID).Scan(&objectRef,&contentType,&track,&sequence,&conversationPublicID,&consent)
err=tx.QueryRow(ctx,`SELECT sd.subject_id::text FROM sharing_grant sg
JOIN user_account ua ON ua.id=sg.grantee_user_id AND ua.tenant_id=sg.tenant_id AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active'
JOIN story_draft sd ON sd.public_id=sg.resource_public_id AND sd.tenant_id=sg.tenant_id
WHERE sg.public_id=$1::uuid AND sg.resource_type='STORY' AND sg.permission='EDIT' AND sg.revoked_at IS NULL AND sg.expires_at>now() AND sd.call_session_id IS NOT NULL`,grantPublicID,principal.Issuer,principal.Subject).Scan(&callSubject)
iferr!=nil&&!errors.Is(err,pgx.ErrNoRows){
returnSharedResource{},err
}
ifcallSubject!=""{
varepochint64
iferr=tx.QueryRow(ctx,`SELECT privacy_epoch FROM memory_user_state WHERE subject_id=$1::uuid FOR UPDATE`,callSubject).Scan(&epoch);err!=nil{
err=tx.QueryRow(ctx,`SELECT sg.id::text,sg.tenant_id::text,ua.id::text,ua.public_id::text,sg.resource_public_id::text,sg.permission,(sg.revoked_at IS NULL AND sg.expires_at>now()),sd.id::text,sd.current_revision_id::text,sd.title,sd.version,sr.revision_no FROM sharing_grant sg JOIN user_account ua ON ua.id=sg.grantee_user_id AND ua.tenant_id=sg.tenant_id AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active' JOIN story_draft sd ON sd.public_id=sg.resource_public_id AND sd.tenant_id=sg.tenant_id JOIN story_revision sr ON sr.id=sd.current_revision_id WHERE sg.public_id=$1::uuid AND sg.resource_type='STORY' AND call_story_available(sd.id) FOR UPDATE OF sg,sd`,grantPublicID,principal.Issuer,principal.Subject).Scan(&grantID,&tenantID,&userID,&userPublicID,&resourceID,&permission,&active,&storyID,¤tRevisionID,&title,&version,&revisionNo)
iferr=tx.QueryRow(ctx,`SELECT call_story_available(id) AND status NOT IN ('REJECTED','SUPERSEDED') FROM story_draft WHERE id=$1::uuid`,storyID).Scan(&available);err!=nil{
if_,err=tx.Exec(ctx,`INSERT INTO story_source(story_revision_id,conversation_turn_id,call_session_id,call_utterance_id,call_source_revision,import_turn_id,source_start_offset,source_end_offset,source_role) SELECT $1::uuid,conversation_turn_id,call_session_id,call_utterance_id,call_source_revision,import_turn_id,source_start_offset,source_end_offset,source_role FROM story_source WHERE story_revision_id=$2::uuid`,newRevisionID,currentRevisionID);err!=nil{
iferr=tx.QueryRow(ctx,`UPDATE story_draft SET current_revision_id=$2::uuid,status='IN_REVIEW',reviewed_by=$3::uuid,reviewed_at=now(),review_reason=$4,version=version+1,updated_at=now() WHERE id=$1::uuid RETURNING version`,storyID,newRevisionID,userID,reason).Scan(&version);err!=nil{
if_,err=tx.Exec(ctx,`INSERT INTO sharing_access_log(tenant_id,sharing_grant_id,actor_user_id,actor_identifier_digest,resource_type,resource_public_id,permission,result,request_id) VALUES($1::uuid,$2::uuid,$3::uuid,$4,'STORY',$5::uuid,'EDIT','SUCCESS',$6)`,tenantID,grantID,userID,actorDigest,resourceID,requestID);err!=nil{
_,err:=s.pool.Exec(ctx,`INSERT INTO sharing_access_log(tenant_id,sharing_grant_id,actor_user_id,actor_identifier_digest,resource_type,resource_public_id,permission,result,reason_code,request_id) VALUES($1::uuid,$2::uuid,$3::uuid,$4,$5,$6::uuid,$7,$8,NULLIF($9,''),$10)`,tenantID,grantID,actor,actorDigest,resourceType,resourceID,permission,result,reason,requestID)
joins="JOIN subject_profile sp ON sp.id=resource.subject_id AND sp.tenant_id=resource.tenant_id"
subjectExpr="resource.subject_id"
householdExpr="sp.household_id"
tenantExpr="resource.tenant_id"
case"TRANSCRIPT":
resourceTable="conversation resource"
joins="JOIN subject_profile sp ON sp.id=resource.subject_id AND sp.tenant_id=resource.tenant_id"
subjectExpr="resource.subject_id"
householdExpr="resource.household_id"
tenantExpr="resource.tenant_id"
case"RECORDING":
resourceTable="media_segment resource"
joins="JOIN conversation c ON c.id=resource.conversation_id AND c.tenant_id=resource.tenant_id JOIN subject_profile sp ON sp.id=c.subject_id AND sp.tenant_id=c.tenant_id"
query:=fmt.Sprintf(`SELECT %s::text,%s::text,%s::text,sp.public_id::text,ua.id::text,ua.public_id::text,hm.role FROM %s %s JOIN household_member hm ON hm.tenant_id=%s AND hm.household_id=%s AND hm.status='active' JOIN user_account ua ON ua.id=hm.user_id AND ua.tenant_id=%s AND ua.oidc_issuer=$2 AND ua.oidc_subject=$3 AND ua.status='active' WHERE resource.public_id=$1::uuid%s`,tenantExpr,householdExpr,subjectExpr,resourceTable,joins,tenantExpr,householdExpr,tenantExpr,lockClause)