diff --git a/synapse/storage/databases/main/profile.py b/synapse/storage/databases/main/profile.py
index a1747f04ce..b109f8c07f 100644
--- a/synapse/storage/databases/main/profile.py
+++ b/synapse/storage/databases/main/profile.py
@@ -11,14 +11,34 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-from typing import Optional
+from typing import TYPE_CHECKING, Optional
from synapse.api.errors import StoreError
from synapse.storage._base import SQLBaseStore
+from synapse.storage.database import DatabasePool, LoggingDatabaseConnection
from synapse.storage.databases.main.roommember import ProfileInfo
+from synapse.types import UserID
+
+if TYPE_CHECKING:
+ from synapse.server import HomeServer
class ProfileWorkerStore(SQLBaseStore):
+ def __init__(
+ self,
+ database: DatabasePool,
+ db_conn: LoggingDatabaseConnection,
+ hs: "HomeServer",
+ ):
+ super().__init__(database, db_conn, hs)
+ self.db_pool.updates.register_background_index_update(
+ "profiles_full_user_id_key_idx",
+ index_name="profiles_full_user_id_key",
+ table="profiles",
+ columns=["full_user_id"],
+ unique=True,
+ )
+
async def get_profileinfo(self, user_localpart: str) -> ProfileInfo:
try:
profile = await self.db_pool.simple_select_one(
@@ -54,28 +74,36 @@ class ProfileWorkerStore(SQLBaseStore):
desc="get_profile_avatar_url",
)
- async def create_profile(self, user_localpart: str) -> None:
+ async def create_profile(self, user_id: UserID) -> None:
+ user_localpart = user_id.localpart
await self.db_pool.simple_insert(
- table="profiles", values={"user_id": user_localpart}, desc="create_profile"
+ table="profiles",
+ values={"user_id": user_localpart, "full_user_id": user_id.to_string()},
+ desc="create_profile",
)
async def set_profile_displayname(
- self, user_localpart: str, new_displayname: Optional[str]
+ self, user_id: UserID, new_displayname: Optional[str]
) -> None:
+ user_localpart = user_id.localpart
await self.db_pool.simple_upsert(
table="profiles",
keyvalues={"user_id": user_localpart},
- values={"displayname": new_displayname},
+ values={
+ "displayname": new_displayname,
+ "full_user_id": user_id.to_string(),
+ },
desc="set_profile_displayname",
)
async def set_profile_avatar_url(
- self, user_localpart: str, new_avatar_url: Optional[str]
+ self, user_id: UserID, new_avatar_url: Optional[str]
) -> None:
+ user_localpart = user_id.localpart
await self.db_pool.simple_upsert(
table="profiles",
keyvalues={"user_id": user_localpart},
- values={"avatar_url": new_avatar_url},
+ values={"avatar_url": new_avatar_url, "full_user_id": user_id.to_string()},
desc="set_profile_avatar_url",
)
|