From 47c1ef2b49e1c09432f0b251d4a7e81b1f217094 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 17 Mar 2020 12:26:56 +0000 Subject: [PATCH] Reduce cyclomatic complexity --- roomserver/storage/postgres/storage.go | 36 +++++++++++++++++--------- roomserver/storage/sqlite3/storage.go | 36 +++++++++++++++++--------- 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/roomserver/storage/postgres/storage.go b/roomserver/storage/postgres/storage.go index 91fe9bdfd..46b4f4d0b 100644 --- a/roomserver/storage/postgres/storage.go +++ b/roomserver/storage/postgres/storage.go @@ -77,18 +77,9 @@ func (d *Database) StoreEvent( // Note that the below logic depends on the m.room.create event being the // first event that is persisted to the database when creating or joining a // room. - roomVersion := roomserverVersion.DefaultRoomVersion() - // Look for m.room.create events. - if event.Type() == gomatrixserverlib.MRoomCreate { - var createContent gomatrixserverlib.CreateContent - // The m.room.create event contains an optional "room_version" key in - // the event content, so we need to unmarshal that first. - if err = json.Unmarshal(event.Content(), &createContent); err == nil { - if createContent.RoomVersion != nil { - // A room version was specified in the event content. - roomVersion = *createContent.RoomVersion - } - } + var roomVersion gomatrixserverlib.RoomVersion + if roomVersion, err = extractRoomVersionFromCreateEvent(event); err != nil { + return 0, types.StateAtEvent{}, err } if roomNID, err = d.assignRoomNID(ctx, nil, event.RoomID(), roomVersion); err != nil { @@ -143,6 +134,27 @@ func (d *Database) StoreEvent( }, nil } +func extractRoomVersionFromCreateEvent(event gomatrixserverlib.Event) ( + roomVersion gomatrixserverlib.RoomVersion, err error, +) { + // Look for m.room.create events. + if event.Type() != gomatrixserverlib.MRoomCreate { + return + } + roomVersion = roomserverVersion.DefaultRoomVersion() + var createContent gomatrixserverlib.CreateContent + // The m.room.create event contains an optional "room_version" key in + // the event content, so we need to unmarshal that first. + if err = json.Unmarshal(event.Content(), &createContent); err != nil { + return + } + // A room version was specified in the event content? + if createContent.RoomVersion != nil { + roomVersion = *createContent.RoomVersion + } + return +} + func (d *Database) assignRoomNID( ctx context.Context, txn *sql.Tx, roomID string, roomVersion gomatrixserverlib.RoomVersion, diff --git a/roomserver/storage/sqlite3/storage.go b/roomserver/storage/sqlite3/storage.go index 2f831a450..32ddceb37 100644 --- a/roomserver/storage/sqlite3/storage.go +++ b/roomserver/storage/sqlite3/storage.go @@ -99,18 +99,9 @@ func (d *Database) StoreEvent( // Note that the below logic depends on the m.room.create event being the // first event that is persisted to the database when creating or joining a // room. - roomVersion := roomserverVersion.DefaultRoomVersion() - // Look for m.room.create events. - if event.Type() == gomatrixserverlib.MRoomCreate { - var createContent gomatrixserverlib.CreateContent - // The m.room.create event contains an optional "room_version" key in - // the event content, so we need to unmarshal that first. - if err = json.Unmarshal(event.Content(), &createContent); err == nil { - if createContent.RoomVersion != nil { - // A room version was specified in the event content. - roomVersion = *createContent.RoomVersion - } - } + var roomVersion gomatrixserverlib.RoomVersion + if roomVersion, err = extractRoomVersionFromCreateEvent(event); err != nil { + return err } if roomNID, err = d.assignRoomNID(ctx, txn, event.RoomID(), roomVersion); err != nil { @@ -172,6 +163,27 @@ func (d *Database) StoreEvent( }, nil } +func extractRoomVersionFromCreateEvent(event gomatrixserverlib.Event) ( + roomVersion gomatrixserverlib.RoomVersion, err error, +) { + // Look for m.room.create events. + if event.Type() != gomatrixserverlib.MRoomCreate { + return + } + roomVersion = roomserverVersion.DefaultRoomVersion() + var createContent gomatrixserverlib.CreateContent + // The m.room.create event contains an optional "room_version" key in + // the event content, so we need to unmarshal that first. + if err = json.Unmarshal(event.Content(), &createContent); err != nil { + return + } + // A room version was specified in the event content? + if createContent.RoomVersion != nil { + roomVersion = *createContent.RoomVersion + } + return +} + func (d *Database) assignRoomNID( ctx context.Context, txn *sql.Tx, roomID string, roomVersion gomatrixserverlib.RoomVersion,