streams: Include only IDs in default streams data.

Clients do not need complete stream objects in the default
streams data since they already have that via streams and
subscriptions data.
This commit is contained in:
Sahil Batra
2023-08-02 19:11:29 +05:30
committed by Tim Abbott
parent a9b9ed6c5b
commit 1c933dd231
9 changed files with 39 additions and 52 deletions

View File

@@ -20,6 +20,12 @@ format used by the Zulip server that they are interacting with.
## Changes in Zulip 10.0
**Feature level 330**
* [`POST /register`](/api/register-queue), [`GET /events`](/api/get-events):
Default channels data only includes channel IDs now instead of full
channel data.
**Feature level 329**
* [`PATCH /realm/user_settings_defaults`](/api/update-realm-user-settings-defaults),

View File

@@ -2,11 +2,7 @@ import {z} from "zod";
import {server_add_bot_schema} from "./bot_types.ts";
import {realm_default_settings_schema} from "./realm_user_settings_defaults.ts";
import {
api_stream_subscription_schema,
never_subscribed_stream_schema,
stream_schema,
} from "./stream_types.ts";
import {api_stream_subscription_schema, never_subscribed_stream_schema} from "./stream_types.ts";
import {group_setting_value_schema} from "./types.ts";
import {user_settings_schema} from "./user_settings.ts";
import {user_status_schema} from "./user_status_types.ts";
@@ -477,7 +473,7 @@ export const state_data_schema = z
subscriptions: z.array(api_stream_subscription_schema),
unsubscribed: z.array(api_stream_subscription_schema),
never_subscribed: z.array(never_subscribed_stream_schema),
realm_default_streams: z.array(stream_schema),
realm_default_streams: z.array(z.number()),
})
.transform((stream_data) => ({stream_data})),
)

View File

@@ -698,11 +698,11 @@ export function is_web_public_by_stream_id(stream_id: number): boolean {
return sub.is_web_public;
}
export function set_realm_default_streams(realm_default_streams: Stream[]): void {
export function set_realm_default_streams(realm_default_streams: number[]): void {
default_stream_ids.clear();
for (const stream of realm_default_streams) {
default_stream_ids.add(stream.stream_id);
for (const stream_id of realm_default_streams) {
default_stream_ids.add(stream_id);
}
}

View File

@@ -165,7 +165,7 @@ exports.fixtures = {
default_streams: {
type: "default_streams",
default_streams: [streams.devel, streams.test],
default_streams: [streams.devel.stream_id, streams.test.stream_id],
},
delete_message: {

View File

@@ -199,7 +199,7 @@ test("basics", () => {
assert.equal(sub_store.maybe_get_stream_name(social.stream_id), "social");
assert.equal(sub_store.maybe_get_stream_name(42), undefined);
stream_data.set_realm_default_streams([denmark]);
stream_data.set_realm_default_streams([denmark.stream_id]);
assert.ok(stream_data.is_default_stream_id(denmark.stream_id));
assert.ok(!stream_data.is_default_stream_id(social.stream_id));
assert.ok(!stream_data.is_default_stream_id(999999));
@@ -647,7 +647,7 @@ test("default_stream_names", () => {
invite_only: false,
};
stream_data.set_realm_default_streams([announce, general]);
stream_data.set_realm_default_streams([announce.stream_id, general.stream_id]);
stream_data.add_sub(announce);
stream_data.add_sub(public_stream);
stream_data.add_sub(private_stream);
@@ -934,7 +934,7 @@ test("remove_default_stream", () => {
};
stream_data.add_sub(remove_me);
stream_data.set_realm_default_streams([remove_me]);
stream_data.set_realm_default_streams([remove_me.stream_id]);
stream_data.remove_default_stream(remove_me.stream_id);
assert.ok(!stream_data.is_default_stream_id(remove_me.stream_id));
});
@@ -1093,7 +1093,7 @@ test("get_invite_stream_data", ({override}) => {
override(current_user, "is_admin", true);
stream_data.add_sub(orie);
stream_data.set_realm_default_streams([orie]);
stream_data.set_realm_default_streams([orie.stream_id]);
const expected_list = [
{

View File

@@ -4,10 +4,7 @@ from typing import Any
from django.db import transaction
from django.utils.translation import gettext as _
from zerver.lib.default_streams import (
get_default_stream_ids_for_realm,
get_default_streams_for_realm_as_dicts,
)
from zerver.lib.default_streams import get_default_stream_ids_for_realm
from zerver.lib.exceptions import JsonableError
from zerver.models import DefaultStream, DefaultStreamGroup, Realm, Stream
from zerver.models.streams import get_default_stream_groups
@@ -55,7 +52,7 @@ def lookup_default_stream_groups(
def notify_default_streams(realm: Realm) -> None:
event = dict(
type="default_streams",
default_streams=get_default_streams_for_realm_as_dicts(realm.id),
default_streams=list(get_default_stream_ids_for_realm(realm.id)),
)
send_event_on_commit(realm, event, active_non_guest_user_ids(realm.id))

View File

@@ -228,7 +228,7 @@ check_default_stream_groups = make_checker(default_stream_groups_event)
default_streams_event = event_dict_type(
required_keys=[
("type", Equals("default_streams")),
("default_streams", ListType(DictType(default_stream_fields))),
("default_streams", ListType(int)),
]
)
check_default_streams = make_checker(default_streams_event)

View File

@@ -20,7 +20,7 @@ from zerver.lib.alert_words import user_alert_words
from zerver.lib.avatar import avatar_url
from zerver.lib.bot_config import load_bot_config_template
from zerver.lib.compatibility import is_outdated_server
from zerver.lib.default_streams import get_default_streams_for_realm_as_dicts
from zerver.lib.default_streams import get_default_stream_ids_for_realm
from zerver.lib.exceptions import JsonableError
from zerver.lib.external_accounts import get_default_external_accounts
from zerver.lib.integrations import (
@@ -713,7 +713,7 @@ def fetch_initial_state_data(
# doesn't have any.
state["realm_default_streams"] = []
else:
state["realm_default_streams"] = get_default_streams_for_realm_as_dicts(realm.id)
state["realm_default_streams"] = list(get_default_stream_ids_for_realm(realm.id))
if want("default_stream_groups"):
if settings_user.is_guest:
@@ -1020,8 +1020,8 @@ def apply_event(
if state["is_guest"]:
state["realm_default_streams"] = []
else:
state["realm_default_streams"] = get_default_streams_for_realm_as_dicts(
user_profile.realm_id
state["realm_default_streams"] = list(
get_default_stream_ids_for_realm(user_profile.realm_id)
)
for field in ["delivery_email", "email", "full_name", "is_billing_admin"]:

View File

@@ -2085,34 +2085,19 @@ paths:
default_streams:
type: array
description: |
An array of dictionaries where each dictionary
contains details about a single default channel.
An array of IDs of all the [default channels](/help/set-default-streams-for-new-users)
in the organization.
**Changes**: Before Zulip 10.0 (feature level 330),
we sent array of dictionaries where each dictionary
contained details about a single default stream for
the Zulip organization.
items:
$ref: "#/components/schemas/DefaultChannel"
type: integer
example:
{
"type": "default_streams",
"default_streams":
[
{
"name": "Scotland",
"stream_id": 3,
"is_archived": false,
"description": "Located in the United Kingdom",
"rendered_description": "<p>Located in the United Kingdom</p>",
"date_created": 1691057093,
"creator_id": 8,
"invite_only": false,
"is_web_public": false,
"stream_post_policy": 1,
"history_public_to_subscribers": true,
"first_message_id": 1,
"is_recently_active": true,
"message_retention_days": null,
"is_announcement_only": false,
"can_remove_subscribers_group": 2,
},
],
"default_streams": [2, 3],
"id": 0,
}
- type: object
@@ -15104,13 +15089,16 @@ paths:
realm_default_streams:
type: array
items:
$ref: "#/components/schemas/DefaultChannel"
type: integer
description: |
Present if `default_streams` is present in `fetch_event_types`.
An array of dictionaries where each dictionary contains details
about a single [default channel](/help/set-default-channels-for-new-users)
for the Zulip organization.
An array of IDs of all the [default channels](/help/set-default-streams-for-new-users)
in the organization.
**Changes**: Before Zulip 10.0 (feature level 330), we sent
array of dictionaries where each dictionary contained details
about a single default stream for the Zulip organization.
realm_default_stream_groups:
type: array
items: