Ejemplo n.º 1
0
        public IEnumerable <Task> GetTasks([FromBody] DataPost data)
        {
            var path         = GetPath(data.Topic, data.TaskType, data.Level);
            var streamReader = new StreamReader(path);
            var json         = streamReader.ReadToEnd();
            var tasks        = JsonConvert.DeserializeObject <List <Models.Task> >(json);

            streamReader.Close();
            return(tasks);
        }
Ejemplo n.º 2
0
        public IEnumerable <Task> GetTasks_QR([FromBody] DataPost data)
        {
            var topic        = GetTopic(data.Topic);
            var path         = GetPath(topic, data.Subtopic);
            var streamReader = new StreamReader(path);
            var json         = streamReader.ReadToEnd();
            var tasks        = JsonConvert.DeserializeObject <List <Task> >(json);

            streamReader.Close();
            return(tasks);
        }
Ejemplo n.º 3
0
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(Titulo);
            sb.AppendLine(Likes + " Likes - " + DataPost.ToString("d/MM/yyyy HH:mm:ss"));
            sb.AppendLine(Conteudo);
            sb.AppendLine("Comentários: ");

            foreach (Comentario c in Comentarios)
            {
                sb.AppendLine(c.Texto);
            }
            return(sb.ToString());
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Subir un solo Registro generado por el Dispositivo KMS. El uso de éste recurso está
        ///     desaconsejado para Apps de producción (rápidamente podrías consumir la cuota de peticiones
        ///     que tiene tu API-Key). Está aquí principalmente para debugging en ambas partes (server y Apps).
        /// </summary>
        /// <param name="dataPost">
        ///     Registro del Dispositivo KMS.
        /// </param>
        public HttpResponseMessage PostData([FromBody] DataPost dataPost)
        {
            // --- Validar que Usuario actual tenga capturado Perfil Físico ---
            if (CurrentUser.UserBody == null)
            {
                throw new HttpConflictException(
                          "204 " + ControllerStrings.Warning204_PhysicalInfoNotSet
                          );
            }

            // --- Determinar la última fecha registrada ---
            Data lastData = Database.DataStore.GetFirst(
                filter: f =>
                f.User.Guid == CurrentUser.Guid,
                orderBy: o =>
                o.OrderByDescending(b => b.Timestamp)
                );

            DateTime lastDataTimestamp = lastData == null
                ? DateTime.MinValue
                : lastData.Timestamp;

            // --- Determinar los registros si se almacenarán en BD ---
            // Especificar que fecha es UTC
            dataPost.Timestamp = DateTime.SpecifyKind(
                dataPost.Timestamp,
                DateTimeKind.Utc
                );

            if (dataPost.Timestamp < lastDataTimestamp)
            {
                throw new HttpConflictException(
                          ControllerStrings.Warning302_DataTimestampTooOld
                          );
            }

            this.PrepareDataInsert(dataPost);
            Database.SaveChanges();

            // --- Ejecutar magia --
            this.MagicTriggers();

            return(new HttpResponseMessage()
            {
                RequestMessage = Request,
                StatusCode = HttpStatusCode.OK
            });
        }
Ejemplo n.º 5
0
        public void GetWall(string userid, string guestId)
        {
            var user  = _users.Find(findUser => findUser.Id == userid).FirstOrDefault();
            var guest = _users.Find(findGuest => findGuest.Id == guestId).FirstOrDefault();

            if (user == null || guest == null)
            {
                Console.WriteLine("User or guest doesn't exist");
                return;
            }

            if (user.BlockId != null)
            {
                if (user.BlockId.Contains(guestId))
                {
                    Console.WriteLine("Guest is blocked by user!");
                    return;
                }
            }

            var wall = _posts.Find(postsOnWall =>
                                   postsOnWall.AuthorId == user.Id)
                       .SortBy(post => post.DateTime).Limit(5).ToList();

            if (wall.Count == 0 || wall == null)
            {
                Console.WriteLine("There's no posts on the wall!");
                return;
            }

            foreach (var wp in wall)
            {
                if (!wp.IsPublic && !wp.BlockedAllowedUserId.Contains(guestId))
                {
                    continue;
                }

                if (wp is DataPost)
                {
                    DataPost dp = (DataPost)wp;
                    Console.WriteLine($"Wall: {dp.UrlToData}");
                }
                else if (wp is TextPost)
                {
                    TextPost tp = (TextPost)wp;
                    Console.WriteLine($"Wall: {tp.Text}");
                }

                var comments = _comments.Find(comment =>
                                              comment.PostId == wp.PostId)
                               .SortByDescending(comment => comment.PostId).Limit(5).ToList();


                if (comments == null)
                {
                    Console.WriteLine("There's no comment to the post on the wall");
                    return;
                }

                foreach (var c in comments)
                {
                    Console.WriteLine($"Comment: {c.CommentString} at {c.DateTime}");
                }
            }
        }
Ejemplo n.º 6
0
        //Get feed from er specific user
        public void GetFeed(string userid)
        {
            var user = _users.Find(findUser => findUser.Id == userid).FirstOrDefault();

            //Find user from whom, you want to see feed
            if (user == null)
            {
                Console.WriteLine("User doesn't exist");
                return;
            }


            var userFeed = _posts.Find(post =>
                                       //Checking if post is private or public, if the use is blocked
                                       //or not - and if the user follows the author of post
                                       (post.IsPublic == false &&
                                        post.BlockedAllowedUserId.Contains(userid) &&
                                        user.FollowId.Contains(post.AuthorId)) ||

                                       //If the post is public - we're checking if the user
                                       //is in the "blockedAllowedUserId list (if the user is, post wont show in feed)
                                       (post.IsPublic &&
                                        !post.BlockedAllowedUserId.Contains(userid) &&
                                        user.FollowId.Contains(post.AuthorId)
                                       ))
                           .SortByDescending(post => post.PostId).Limit(5).ToList();

            if (userFeed.Count == 0)
            {
                Console.WriteLine("User has no feed to see");
                return;
            }
            foreach (var f in userFeed)
            {
                if (f is DataPost)
                {
                    DataPost dp = (DataPost)f;
                    Console.WriteLine($"Feed: {dp.UrlToData}");
                }
                else if (f is TextPost)
                {
                    TextPost tp = (TextPost)f;
                    Console.WriteLine($"Feed: {tp.Text}");
                }

                //Console.WriteLine($"Feed: {f}");

                var comments = _comments.Find(comment =>
                                              comment.PostId == f.PostId)
                               .SortByDescending(comment => comment.PostId).Limit(5).ToList();

                if (comments == null)
                {
                    Console.WriteLine("There's no comment to the post on the feed");
                    return;
                }
                foreach (var c in comments)
                {
                    Console.WriteLine($"Comment: {c.CommentString} at {c.DateTime}");
                }
            }
            ////////////////////////////////////////////////////////////////////////////////////////
        }
        private void CreateDataPost(User user)
        {
            DataPost post = new DataPost();

            post.AuthorId   = user.Id;
            post.AuthorName = user.Name;

            Console.WriteLine($"\nHello {post.AuthorName}! You are making a datapost.");

            Console.WriteLine("Do you want your post to be public or not?");
            ConsoleKeyInfo key;

            do
            {
                Console.WriteLine("PRESS 'Y' for YES or 'N' for NO");
                key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Y)
                {
                    post.IsPublic = true;
                    Console.WriteLine("Post status: Public\n");
                }
                else if (key.Key == ConsoleKey.N)
                {
                    post.IsPublic = false;
                    Console.WriteLine("Post status: Private\n");
                }
            } while (key.Key != ConsoleKey.Y && key.Key != ConsoleKey.N);

            //Write data to post//
            Console.WriteLine("Write data, exit with 'Enter': ");
            post.UrlToData = Console.ReadLine();
            Console.WriteLine();
            // ===================== //

            _posts.InsertOne(post);

            if (post.IsPublic == true)
            {
                foreach (var id in user.BlockId)
                {
                    var updateBlockedAllowedUserId = Builders <Post> .Update.AddToSet(post => post.BlockedAllowedUserId, id);

                    _posts.FindOneAndUpdate(post => post.AuthorId == user.Id, updateBlockedAllowedUserId);
                }

                Console.WriteLine("Public post added");
            }
            else
            {
                Console.WriteLine("Which circle(s) do you want to post to?\nHere is your list of circles: ");
                foreach (var id in user.CircleId)
                {
                    var c = _circles.Find <Circle>(c => c.CircleId == id).FirstOrDefault();
                    if (c == null)
                    {
                        Console.WriteLine("You don't have any circles");
                    }

                    Console.WriteLine($"Circle id: {c.CircleId}, Cicle name: {c.Name}");
                }

                Console.WriteLine("\nWrite the id of the circles, you want to include, one at a time.");

                do
                {
                    Console.Write("Write id: ");
                    string circleIdToInclude = Console.ReadLine();

                    if (user.CircleName.Contains(circleIdToInclude))
                    {
                        var updateBlockedAllowedUserId = Builders <Post> .Update.AddToSet(post => post.BlockedAllowedUserId, circleIdToInclude);

                        _posts.FindOneAndUpdate(post => post.AuthorId == user.Id, updateBlockedAllowedUserId);
                    }
                    else
                    {
                        Console.WriteLine("Id does not exist");
                    }

                    do
                    {
                        Console.WriteLine("Pess 'A' to add another circle");
                        Console.WriteLine("Pess 'C' to Continue");

                        key = Console.ReadKey(true);
                    } while (key.Key != ConsoleKey.A && key.Key != ConsoleKey.C);
                } while (key.Key == ConsoleKey.A);

                Console.WriteLine("Private post added to circles");
            }


            try
            {
                var updateUserPostId = Builders <User> .Update.AddToSet(user => user.UserPostsId, post.PostId);

                _users.FindOneAndUpdate(user => user.Id == post.AuthorId, updateUserPostId);
            }
            catch (Exception)
            {
                Console.WriteLine("User doesn't exist");
                return;
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Prepara la inserción de Datos, sin consultar detalles del
        /// Perfil Físico del Usuario aún.
        /// </summary>
        /// <param name="dataPost"></param>
        /// <param name="userBody"></param>
        private void PrepareDataInsert(DataPost dataPost)
        {
            // --- Validar que Activity esté soportado ---
            var   activity     = dataPost.Activity.ToUpper(CultureInfo.InvariantCulture);
            var   activityEnum = Enum.GetNames(typeof(DataActivity));
            short activityId   = 0;

            for (short i = 0; i < activityEnum.Length; i++)
            {
                if (activityEnum[i].ToUpper(CultureInfo.InvariantCulture) == activity)
                {
                    activityId = (short)(i + 1);
                    break;
                }
            }

            if (activityId == 0)
            {
                throw new HttpBadRequestException(
                          "301 " + ControllerStrings.Warning301_ActivityInvalid
                          );
            }

            var dataActivity = (DataActivity)activityId;

            // --- Determinar el largo de zancada ---
            int strideLength;

            switch (dataActivity)
            {
            case DataActivity.Running:
                strideLength = CurrentUser.UserBody.StrideLengthRunning;
                break;

            case DataActivity.Walking:
                strideLength = CurrentUser.UserBody.StrideLengthWalking;
                break;

            default:
                strideLength = 0;
                break;
            }

            // --- Añadir el nuevo registro ---
            Data newData
                = new Data()
                {
                User = CurrentUser,

                Timestamp    = dataPost.Timestamp,
                Activity     = dataActivity,
                Steps        = dataPost.Steps,
                StrideLength = strideLength,

                EqualsKcal = (Int32)CurrentUser.UserBody.CalculateCaloriesBurned(
                    dataPost.Steps,
                    dataActivity
                    ),
                EqualsCo2 = (Int32)(
                    // Distancia en la lectura
                    (strideLength * dataPost.Steps).CentimetersToKilometers()
                    // [x] Litros de Gasolina por Kilómetro
                    * 1.25d
                    // [x] Gramos de CO2 por Litro de Gasolina
                    * 2303
                    ),
                EqualsCash = (Int32)(
                    (
                        // Distancia en la lectura
                        (strideLength * dataPost.Steps).CentimetersToKilometers()
                        // [/] Kilómetros por Litro de Gasoilna
                        / 10d
                        // [x] Precio por Litro de Gasolina en Centavos de Dólar
                    ) * 100.0d
                    )
                };

            Database.DataStore.Add(newData);
        }
        public static void InsertCommentDummyData(IMongoDatabase database, TextPost tp, DataPost dp)
        {
            var comments = database.GetCollection <Comment>("Comments");

            var comment1  = new Comment(tp.PostId, tp.AuthorId, tp.AuthorName, commentstring: "Hvor er du?", new DateTime(year: 2019, month: 11, day: 29, hour: 19, minute: 3, second: 43));
            var comment2  = new Comment(dp.PostId, dp.AuthorId, dp.AuthorName, commentstring: "HVOR ER DU?", new DateTime(year: 2019, month: 11, day: 29, hour: 19, minute: 3, second: 43));
            var comment3  = new Comment(tp.PostId, tp.AuthorId, tp.AuthorName, commentstring: "WebAPI load", new DateTime(year: 2019, month: 11, day: 29, hour: 11, minute: 23, second: 23));
            var comment4  = new Comment(dp.PostId, dp.AuthorId, dp.AuthorName, commentstring: "MongoDb virker ikke", new DateTime(year: 2019, month: 11, day: 29, hour: 11, minute: 23, second: 28));
            var comment5  = new Comment(tp.PostId, tp.AuthorId, tp.AuthorName, commentstring: "Nu virker det!", new DateTime(year: 2019, month: 11, day: 29, hour: 11, minute: 53, second: 16));
            var comment6  = new Comment(dp.PostId, dp.AuthorId, dp.AuthorName, commentstring: "Giver det mening??", new DateTime(year: 2019, month: 11, day: 29, hour: 7, minute: 23, second: 23));
            var comment7  = new Comment(tp.PostId, tp.AuthorId, tp.AuthorName, commentstring: "Nu er jeg vaagen", new DateTime(year: 2019, month: 11, day: 29, hour: 10, minute: 23, second: 23));
            var comment8  = new Comment(dp.PostId, dp.AuthorId, dp.AuthorName, commentstring: "Du kan bare komme forbi kontoret", new DateTime(year: 2019, month: 11, day: 30, hour: 8, minute: 23, second: 23));
            var comment9  = new Comment(tp.PostId, tp.AuthorId, tp.AuthorName, commentstring: "Jeg tager papir med", new DateTime(year: 2019, month: 11, day: 18, hour: 4, minute: 40, second: 33));
            var comment10 = new Comment(dp.PostId, dp.AuthorId, dp.AuthorName, commentstring: "Kravsspec og review", new DateTime(year: 2019, month: 11, day: 29, hour: 10, minute: 20, second: 0));

            comments.InsertOne(comment1);
            comments.InsertOne(comment2);
            comments.InsertOne(comment3);
            comments.InsertOne(comment4);
            comments.InsertOne(comment5);
            comments.InsertOne(comment6);
            comments.InsertOne(comment7);
            comments.InsertOne(comment8);
            comments.InsertOne(comment9);
            comments.InsertOne(comment10);
        }
        public void InsertDummyData(IMongoDatabase database, string connection)
        {
            var users       = database.GetCollection <User>("Users");
            var posts       = database.GetCollection <Post>("Posts");
            var comments    = database.GetCollection <Comment>("Comments");
            var circles     = database.GetCollection <Circle>("Circles");
            var userService = new UserServices(connection);

            var rand      = new Random(DateTime.Now.Millisecond);
            var usersList = new List <User>();

            #region Users

            for (int i = 0; i < 20; i++)
            {
                var r      = rand.Next(2);
                var gender = r == 1 ? "M" : "F";
                var user   = new User("Name_" + i.ToString(), i + 10, gender);
                usersList.Add(user);
            }
            users.InsertMany(usersList);

            usersList = users.Find(u => true).ToList();

            foreach (var u in usersList)
            {
                foreach (var un in usersList.Where(un => un != u))
                {
                    var uUpdate = users.Find <User>(us => us.Id == u.Id).FirstOrDefault();
                    if (rand.Next(3) == 2)
                    {
                        userService.BlockUser(u.Id, un.Id);
                    }
                    else
                    {
                        userService.Follow(u.Id, un.Id);
                    }
                }
            }

            #endregion

            #region Circle

            foreach (var u in usersList)
            {
                var c1 = new Circle(u.Name + "_C1", u.Id);
                var c2 = new Circle(u.Name + "_C2", u.Id);
                var c3 = new Circle(u.Name + "_C3", u.Id);
                foreach (var un in usersList.Where(un => un != u))
                {
                    var random = rand.Next(3);
                    if (random == 0)
                    {
                        c1.UserIds.Add(un.Id);
                    }
                    else if (random == 1)
                    {
                        c2.UserIds.Add(un.Id);
                    }
                    else if (random == 2)
                    {
                        c3.UserIds.Add(un.Id);
                    }
                }
                circles.InsertOne(c1);
                circles.InsertOne(c2);
                circles.InsertOne(c3);

                var c1d = circles.Find <Circle>(c => c.Name == u.Name + "_C1").FirstOrDefault();
                var c2d = circles.Find <Circle>(c => c.Name == u.Name + "_C2").FirstOrDefault();
                var c3d = circles.Find <Circle>(c => c.Name == u.Name + "_C3").FirstOrDefault();

                var updateCircle1Id = Builders <User> .Update.AddToSet(u => u.CircleId, c1d.CircleId);

                var updateCircle2Id = Builders <User> .Update.AddToSet(u => u.CircleId, c2d.CircleId);

                var updateCircle3Id = Builders <User> .Update.AddToSet(u => u.CircleId, c3d.CircleId);

                users.FindOneAndUpdate(us => us.Id == u.Id, updateCircle1Id);
                users.FindOneAndUpdate(us => us.Id == u.Id, updateCircle2Id);
                users.FindOneAndUpdate(us => us.Id == u.Id, updateCircle3Id);
            }
            usersList = users.Find(u => true).ToList();
            #endregion


            #region Post
            int timeToAdd = 0;
            //Dummy Posts
            foreach (var user in usersList)
            {
                TextPost textPost = new TextPost();
                DataPost dataPost = new DataPost();

                textPost.AuthorId = user.Id;
                dataPost.AuthorId = user.Id;

                textPost.AuthorName = user.Name;
                dataPost.AuthorName = user.Name;

                bool randPublicPost = rand.Next(2) == 1 ? true : false;

                textPost.IsPublic = randPublicPost;
                dataPost.IsPublic = randPublicPost;

                string publicPost = randPublicPost == true ? "public" : "private";

                textPost.Text      = $"My name is {textPost.AuthorName} and my ID is {textPost.AuthorId}. This is a {publicPost} TEXTPOST.";
                dataPost.UrlToData = $"Audio: 'My name is {dataPost.AuthorName} and my ID is {dataPost.AuthorId}. This is a {publicPost} DATAPOST.'";

                //Overwrite DateTime
                textPost.DateTime.AddHours(timeToAdd);
                dataPost.DateTime.AddHours(timeToAdd);
                timeToAdd++;

                posts.InsertOne(textPost);
                posts.InsertOne(dataPost);

                if (randPublicPost == true)
                {
                    foreach (var id in user.BlockId)
                    {
                        var updateBlockedAllowedUserId = Builders <Post> .Update.AddToSet(post => post.BlockedAllowedUserId, id);

                        posts.FindOneAndUpdate(post => post.AuthorId == user.Id, updateBlockedAllowedUserId);
                    }
                }
                else
                {
                    for (int i = 0; i < user.CircleId.Count; i++)
                    {
                        var c = circles.Find <Circle>(c => c.CircleId == user.CircleId[i]).FirstOrDefault();

                        var updateBlockedAllowedUserId = Builders <Post> .Update.AddToSet(post => post.BlockedAllowedUserId, c.CircleId);

                        posts.FindOneAndUpdate(post => post.AuthorId == user.Id, updateBlockedAllowedUserId);
                    }
                }

                try
                {
                    var updateUserPostId = Builders <User> .Update.AddToSet(user => user.UserPostsId, textPost.PostId);

                    users.FindOneAndUpdate(user => user.Id == textPost.AuthorId, updateUserPostId);
                }
                catch (Exception)
                {
                    Console.WriteLine("User doesn't exist");
                    return;
                }

                try
                {
                    var updateUserPostId = Builders <User> .Update.AddToSet(user => user.UserPostsId, dataPost.PostId);

                    users.FindOneAndUpdate(user => user.Id == dataPost.AuthorId, updateUserPostId);
                }
                catch (Exception)
                {
                    Console.WriteLine("User doesn't exist");
                    return;
                }



                //Insert comments to post
                InsertCommentDummyData(database, textPost, dataPost);
            }

            #endregion
        }