membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

membership module - #3

Merged
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership
Mar 25, 2019
Merged

membership module#3
siman merged 33 commits into
Joystream:developmentfrom
mnaamani:membership

Conversation

@mnaamani

@mnaamanimnaamani commented Mar 13, 2019

Copy link
Copy Markdown
Member

Adding membership module.

Comment threadsrc/membership.rs Outdated
#[derive(Encode, Decode)]
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handle:u32,
handle:Vec<u8>,

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest naming this field as about such as description is a better word for items, but not a person

Comment threadsrc/membership.rs Outdated

// Start at 1001? instead to reserve first 1000 ids ?
const FIRST_MEMBER_ID: u64 = 1;
const INITIAL_PAID_TERMS_ID: u64 = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in naming: FIRST_ vs INITIAL_

Comment threadsrc/membership.rs Outdated
NextMemberId get(next_member_id) : T::MemberId = T::MemberId::sa(FIRST_MEMBER_ID);

/// Mapping of member ids to their corresponding accountid
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MembersById get(members_by_id): map T::MemberId => T::AccountId;
AccountIdByMemberId get(account_id_by_member_id): map T::MemberId => T::AccountId;

Comment threadsrc/membership.rs Outdated
MembersById get(members_by_id) : map T::MemberId => T::AccountId;

/// Mapping of members' accountid to their member id
MemberByAccount get(members_by_account) : map T::AccountId => T::MemberId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
MemberByAccount get(members_by_account): map T::AccountId => T::MemberId;
MemberIdByAccountId get(member_id_by_account_id): map T::AccountId => T::MemberId;

Comment threadsrc/membership.rs Outdated
ActivePaidMembershipTerms get(active_paid_membership_terms) : Vec<T::PaidTermId> = vec![T::PaidTermId::sa(INITIAL_PAID_TERMS_ID)];

/// Is the platform is accepting new members or not
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships) : bool = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
PlatformAcceptingNewMemberships get(platform_accepting_new_memberships):bool = true;
NewMembershipsAllowed get(new_memberships_allowed):bool = true;

Comment threadsrc/membership.rs Outdated
pub enum Event<T> where
<T as system::Trait>::AccountId,
<T as Trait>::MemberId {
MemberAdded(MemberId, AccountId),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rename to MemberRegistered? Registered sounds better when we think about users and social networks

Comment threadsrc/membership.rs Outdated
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,
added: T::BlockNumber,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
added:T::BlockNumber,
registeredAt:T::BlockNumber,

Comment threadsrc/membership.rs Outdated
pub struct Profile<T: Trait> {
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their avatar.

Suggested change
avatarUri:Vec<u8>,
avatarUri:Option<Vec<u8>>,

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided on default empty vector == empty string to represent same as not setting avatar or about text. Also makes the batch updating logic simpler.. how to differentiate between user wanting to pass None to 'unset' avatar, or None as in they don't want to update the avatar

@simansimanMar 14, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. In such case, it should be Option<Option<Vec<u8>>> and then if you want to set avatar_uri to None you will pass it with UserInfo as Some(None). And if you don't want to update it, then just None.

Comment threadsrc/membership.rs Outdated
id: T::MemberId, // is it necessary to have the id in the struct?
handle: u32,
avatarUri: Vec<u8>,
description: Vec<u8>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option for a case if a user has not set their about - this is not required, yes?

Suggested change
description:Vec<u8>,
about:Option<Vec<u8>>,

Comment threadsrc/membership.rs Outdated

fn validate_avatar(uri: &Vec<u8>) -> Vec<u8> {
let mut uri = uri.clone();
uri.truncate(Self::max_avatar_uri_length() as usize);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that truncate is a good approach for avatar: if you truncate an URL then it became invalid.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to limit the length somehow. We can accommodate a longer url upto 2000 ? https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same as with a handle:
ensure!(uri.len() <= Self::max_avatar_uri_length() as usize, "avatar uri is too long");

@mnaamani

mnaamani commented Mar 14, 2019 via email

Copy link
Copy Markdown
MemberAuthor

@mnaamani
mnaamani marked this pull request as ready for review March 15, 2019 08:58
Comment threadsrc/membership.rs Outdated
<Handles<T>>::remove(&profile.handle);
<Handles<T>>::insert(handle.clone(), profile.id);
profile.handle = handle;
<MemberProfile<T>>::insert(profile.id, profile);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing an event MemberUpdatedHandle

Comment threadsrc/membership.rs Outdated
Self::_change_member_handle(&who, handle)?;
}

fn batch_change_member_profile(origin, user_info: UserInfo) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe just update_profile?

Suggested change
fnbatch_change_member_profile(origin,user_info:UserInfo){
fnupdate_profile(origin,user_info:UserInfo){

@mnaamanimnaamani changed the title adding membership module - storagemembership moduleMar 16, 2019
@mnaamanimnaamani mentioned this pull request Mar 23, 2019
3 tasks
@bwhmbwhm added this to the Finalize runtime for internal Athens Runtime Testnet milestone Mar 23, 2019
Comment threadsrc/membership/members.rs Outdated
@siman
siman merged commit b592639 into Joystream:developmentMar 25, 2019
bedeho pushed a commit that referenced this pull request Feb 24, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
shamil-gadelshin referenced this pull request in shamil-gadelshin/joystream-network Mar 9, 2020
bedeho pushed a commit that referenced this pull request Apr 16, 2020
Introduce live milestons + various tweaks
bedeho pushed a commit that referenced this pull request Apr 16, 2020
semeano added a commit to semeano/joystream that referenced this pull request May 14, 2020
Lezek123 referenced this pull request in Lezek123/substrate-runtime-joystream May 21, 2020
* NotFound translatable
* Connecting overlay
* Update rx-react (proper state management)
* Use i18n-next everywhere
* @flow updates
@mnaamani
mnaamani deleted the membership branch May 22, 2020 20:32
bedeho pushed a commit that referenced this pull request May 29, 2020
gleb-urvanov referenced this pull request in gleb-urvanov/substrate-runtime-joystream Aug 21, 2020
DzhideX pushed a commit to DzhideX/joystream that referenced this pull request Sep 10, 2020
shamil-gadelshin pushed a commit that referenced this pull request Sep 16, 2020
bwhm referenced this pull request in bwhm/joystream Dec 2, 2020
File input to uploadVideo - suggested approach
shamil-gadelshin pushed a commit that referenced this pull request Apr 4, 2021
mnaamani pushed a commit that referenced this pull request Aug 11, 2021
Lezek123 pushed a commit that referenced this pull request Dec 16, 2021
Fix "Trying to access property id of undefined" (candidate.member.id)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mnaamani@siman@bwhm