I have a plan for a an app that allows multiple users, who'll know each other and select each other for interaction, to go head to head in a football score game. There is no suggestions in my book for this kind of project and I've googled but can't come across information.
What options are available to allow specific people to share data (each person will have the app installed)?
My thoughts lead to a database table of users that would let them 'friend' each other and a table of scores referenced to each person which could be called and presented. Are there other ways? Thanks
Related
Does anyone have experience implementing multiple subscriptions model for an app? I wasn't able to find proper documentation about this topic. The most common way to create in-app subscription model is one-subscription per one-user. But I want to offer one-subscription per one-item(in my app). This means that users can create multiple subscriptions if they want to subscribe to multiple items. Each item is functionally the same.
For example, If the app is a pet location tracker and wants to track both pet A and B, the user has to subscribe to each A and B respectively. It means a total of 2 subscriptions.
Please explain it to me.
Thanks.
Never thought about such a use case, but for iOS you can create multiple subscriptions. So you could create a subscription PetA, PetB, PetC and so on. But, I think you asked for a more dynamic approach where you create a Pet subscription and the user can buy as much as he likes. As far as I know this isn't possible.
A different approach would be to create a subscription hierarchy: onePet, twoPets, threePets and so one. Your user can then up or down grade between those subs depending on how many pets he wants to track. Could get messy if you also want to offer different durations.
A third approach could be to use consumable IAPs. These can be purchased as often as the user likes, but have the disadvantage that you need to keep track of the validity period on your own and they can't be synced automatically between multiple devices.
For your pet example I would go for the second approach and offer a onePet, twoPet, threePet and a unlimitPet subscription. This is the most maintainable approach as long as you do not offer endless duration variations. Also this gets synced automatically with all devices of the user and if you like you can also support family sharing.
I have a question for a project I am working on. I am working on a RoR project in which a site is selling a single type of item, a book. The person I am creating this for does not want to deal with users creating user account to check out as the sales season is very short for this product, the purchases are done once per year, and the site only sells a single item.
I am wondering if there is something wrong with the implementation I am thinking of. What I was envisioning was a single database class called Orders. visitors to the site would simple fill out an order form with payment details through stripe and click submit. If they payment clears, the order with all the Orders information would be persisted to the DB. If the payment fails then it is not persisted and the relevant error information is displayed in using flash.
I suppose the meat of my question is; is there anything inherently 'wrong' about implementing this model without a users class and just having visitors to the site place orders?
I am a fairly new developer and this is my first big project so any feedback is appreciated!
If your requirements say that it is okay, then it is okay, if your requirements say it is not okay, then it is not okay.
There's not more to say, since only you know what your requirements are.
I'm new to Firestore and trying to develop a data model for my app.
Background: I have a dating type of app with 3 primary ways that users will communicate with one another. Liking, dismissing, and commenting user profiles. Users likes & comments are private. In other words, only I can see who's liked or commented my profile (it's not like Social media where everyone can see who's liked a post). I'll need to be able to query users to know who's dismissed their profile so I won't show it to those users again. I'll also need to know who's liked/commented a users profile so I can query which users have liked/commented each other (they've matched)
Users can like many profiles and vice versa
Users can dismiss/skip many profiles and vice versa
Users can comment on many profiles and vice versa
I believe this means I'll need a root collection for likedUsers, dismissedUsers, and commentedUsers
Problem:
For dismissed users, I thought I'd store every single user as a Document of the dismissedUsers root collection and store every user they've skipped as a field/value pair like so...
dismissedUsers/User/user1, user2, user3, etc
The above would create the many-many relationship I want where dismissedUsers can have many users and users can have many dismissedUsers. However, I don't believe it would be scalable as the User Document would grow too large.
Question: How do I create this many-many relationship where dismissedUsers can have many users and users can have many dismissedUsers so that it's scalable and least expensive? And query it?
First of all I would ask myself why I am using Firestore, being a document database, instead of choosing a relational database. I personally love Firestore and highly recommend it. We pick a document database because it is faster and easier to use in many ways. In other ways it is a drawback because you have very limited query power. It sounds to me like your brain is working towards a relational database implementation.
Here is one solution
First of all I would try to avoid storing user data in more than one location to avoid anomalies (of course right). I would have one collection of users where I stored all user data with a unique id (best to use the one that Firestore assigns so I don't have collisions). Within each users document I would link a subcollection for dismissed, liked, been dismissed by someone else, liked by someone else etc.. I would keep a record of all users (just the user id) that they have dismissed, liked, been dismissed by, been liked by etc.. This way I can look up all data for who that user has liked or disliked and display whatever I want to that user accordingly.
Drawbacks
You will have to write twice per like, dismiss etc. Use a batch write to update both the liked and likee data at the same time.
You don't need a collection of users who liked, dismissed, or commented on another users profile. You can have one user collection which stores all users. Inside each user document you can have three array of the user ids of the users that liked, commented, and/or dismissed a user profile. Just make sure that the document ID of the documents inside the users collection matches the user id of the corresponding user.
We recently had a new business rule that will require our users to pay for individual modules in our web application.
So, all the features we build in the application will not apply to all users. Some users can choose to add features that they want.
I've tried researching into an architecture/mindset to how to approach this development.
If I could get an idea on how to get started with this.. I would very much appreciate it.
I work with .NET web applications, and Microsoft SQL Server.
Thanks.
First list what "objects" or things you need to keep track of.
Users
userid
fullname
can manage his features? You said not all users can
...
Features:
featureid
description
cost
...
UserHasFeature
a link between a user and a feature
each line is userid, featureid
Using this you can query which user has what feature. Or list the users that have access to a particular feature.
In your web app, you will need administrator functions:
users management: add, remove, modify, list
feature: add, remove, modify, list
link management: add, remove, list
Reports: whatever reports you want to have
And user functions:
user: signin, modify, reset password, view all features, view features the user already has, add a new feature, remove a feature
reports: total cost of features the user is using, others
Now this is a very quick first draft. There are a lot of missing requirements:
approval workflow: can a user modify his features without the approbation of X?
payment methods
project number for internal billing
cost structure: monthly, one time, ...?
managers can view the features of the employees he manages?
...
This to remember:
Start with objects in your projet. These become tables.
Characteristics of the objects become fields in your tables.
If the same characteristic appears in many object tables, with the same values, consider creating a new table for these. Ex. in an address, you would not leave the country value as a simple VARCHAR field. You would link to another table with the country values.
List the relations. These become foreign keys, or link tables.
Split your objects. So apply 1NF, 2NF and 3NF at least. It is enough for most applications. (NF == Normal Form).
Each table and links require administrator pages (CRUD)
Users have a limited view related to their features only.
This is a huge subject, I could go on and on, but this could get you started.
Have fun!
My web app will have users fill out an application for their profile. Users can enter their skills with years of experience on them. I might have a skills table in my database. A User has_many Skills and a Skill has_many Users.
When a skill has many users, wouldn't that make my table extremely huge because although a skill may already be created in the db, it would have to create a new row to match the user_id? If so, is there a more efficient way to do this (I imagine this format would be costly for the server)? Generally speaking, users could have a range of 0 skills up to 100's each.
The skills need to be cross referenced with a posting so that only users who meet x skills can see y posting. For example, the posting requires that user has x, y, z skills with the correlating lengths of experience. This would be a set of control structures. Say one user puts his skill is 'rails framework' and another user puts his skill is in 'rails development'. These are the same skills, but for the person making the post, to make sure they're getting all qualified users, they have to enter each format of the skill. Is there a way around this so it is more effective and efficient?
It might have a LinkedIn, StackOverflow, Quora styled format for skills where they start typing a skill and it autocompletes/creates suggestions and then the user just clicks the appropriate skill.
For the first part of your question, what you're looking for is either a has_and_belongs_to_many or has_many :through association:
http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
Essentially, you have a table of users, a table of skills, and a third table which serves to join particular users with particular skills.
The 2nd part of your question is a complicated one. By allowing users free reign over entering the skills into your system you lose some control. This is something StackOverflow also has to deal with. Here it is addressed with moderators and community edits, which earn the individuals helping out credits within SO.
Depending on the sort of system you're building, you'll either need paid moderators to provide tight control over how everything is working, or open it up to the community so that they can get it to work the way they want it to. Both of these have their pros and cons, but without keeping complete control over the skills list you can't get away from the issue of duplicate or very similar skills which ought to be the same thing.